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

如何將 JsonElement 或 JsonDocument 轉換為 System.Text.Json 中的物件?

Linda Hamilton
Linda Hamilton原創
2025-01-08 15:47:41294瀏覽

How to Convert a JsonElement or JsonDocument to an Object in System.Text.Json?

System.Text.Json 中的等效函數

Json.NET 框架提供了一個 ToObject() 方法來將 JToken 轉換為類別。但是,System.Text.Json 中沒有這個方法的直接等效項。

針對 .NET 6 及更高版本的解決方法

在 .NET 6 中,引入了擴展方法,允許直接從 JsonElement 或 JsonDocument 反序列化物件。這些方法是:

<code class="language-csharp">public static TValue? Deserialize<TValue>(this JsonDocument document, JsonSerializerOptions? options = null);
public static object? Deserialize(this JsonDocument document, Type returnType, JsonSerializerOptions? options = null);</code>

範例:

<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>

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

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