首頁 > 後端開發 > C++ > 如何將 JsonElement 轉換為 System.Text.Json 中的強型別物件?

如何將 JsonElement 轉換為 System.Text.Json 中的強型別物件?

Linda Hamilton
發布: 2025-01-08 15:37:46
原創
992 人瀏覽過

How to Convert JsonElement to a Strongly-Typed Object in System.Text.Json?

System.Text.Json.JsonElement 的 ToObject 等效方法

概念

在 .NET Core 3 中,Json.NET 函式庫提供了 ToObject 方法,允許將 JToken 物件轉換為強型別類別。本文探討了在 System.Text.Json 中反序列化 JsonElement 物件的等效方法。

解決方案

在 .NET 6 及更高版本:

JsonSerializer 已加入擴充方法,可以直接從 JsonElement 和 JsonDocument 物件反序列化:

<code class="language-csharp">public static TValue? Deserialize<TValue>(this JsonDocument document, JsonSerializerOptions? options = null);
public static TValue? Deserialize<TValue>(this JsonElement element, JsonSerializerOptions? options = null);</code>
登入後複製

在 .NET 5 及更早版本:

可以使用一種變通方法來提高性能:

<code class="language-csharp">public static T ToObject<T>(this JsonElement element, JsonSerializerOptions options = null)
{
    var bufferWriter = new ArrayBufferWriter<byte>();
    using (var writer = new Utf8JsonWriter(bufferWriter))
        element.WriteTo(writer);
    return JsonSerializer.Deserialize<T>(bufferWriter.WrittenSpan, options);
}</code>
登入後複製

範例

<code class="language-csharp">var str = ""; // 一些 JSON 字符串
var jDoc = JsonDocument.Parse(str);
var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<SomeClass>();</code>
登入後複製

注意

  • 釋放 JsonDocument 物件以釋放記憶體資源。
  • .NET 6 中為 JsonNode 新增了擴充方法,用於類似的反序列化功能。
  • 變通方法的效能較好,因為它避免了不必要的字串轉換。

以上是如何將 JsonElement 轉換為 System.Text.Json 中的強型別物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板