首頁 >後端開發 >C++ >如何將 JSON 元素反序列化為 System.Text.Json 中的物件?

如何將 JSON 元素反序列化為 System.Text.Json 中的物件?

Linda Hamilton
Linda Hamilton原創
2025-01-08 15:42:40977瀏覽

How to Deserialize JSON Elements to Objects in System.Text.Json?

System.Text.Json 元素的反序列化

在 Newtonsoft.Json 中,ToObject() 方法通常用於將 JSON 令牌轉換為強型別物件。但是,System.Text.Json 中沒有 readily available 的等效方法。

.NET 6 的解決方法

在 .NET 6 及更高版本中,已向 JsonSerializer 添加擴展方法,可以直接從 JsonElementJsonDocument 反序列化物件。這允許使用以下語法:

<code class="language-csharp">using var jDoc = JsonDocument.Parse(str);
var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<SomeClass>();</code>

.NET 5 及更早版本的解決方法

對於 .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);
}

public static T ToObject<T>(this JsonDocument document, JsonSerializerOptions options = null)
{
    if (document == null)
        throw new ArgumentNullException(nameof(document));
    return document.RootElement.ToObject<T>(options);
}</code>

說明:

  • 請記得對 JsonDocument 使用 using 語句,因為它是可以釋放的。
  • 此解決方法適用於 .NET Core 3.1 和更高版本。

以上是如何將 JSON 元素反序列化為 System.Text.Json 中的物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn