首頁 >後端開發 >C++ >如何有效率地將 JsonElement 轉換為 .NET 物件?

如何有效率地將 JsonElement 轉換為 .NET 物件?

Patricia Arquette
Patricia Arquette原創
2025-01-08 15:31:40770瀏覽

有效率地將 JsonElement 轉換為 .NET 物件

.NET Core 3.0 中引入的 System.Text.Json 提供了高效能的 JSON 處理解決方案。 然而,與 Json.NET 不同,它缺乏與 ToObject 直接等效的方法,以便將 JsonElement 方便地轉換為 .NET 對象,直到 .NET 6。

.NET 6 及更高版本:簡化轉換

.NET 6 及更高版本在 JsonSerializer 中提供內建擴充方法來簡化流程:

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

這允許直接轉換:

<code class="language-csharp">using var jDoc = JsonDocument.Parse(jsonString);
var myObject = jDoc.RootElement.GetProperty("propertyName").Deserialize<MyObjectType>();</code>

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

對於使用 .NET 5 或更早版本的項目,缺乏這些方便的擴展方法,解決方法是將 JsonElement 寫入位元組緩衝區,然後從該緩衝區進行反序列化:

<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)
{
    return document.RootElement.ToObject<T>(options);
}</code>

此方法避免了字串或字元範圍轉換的開銷,為舊的 .NET 版本提供了有效的解決方案。

How to Efficiently Convert JsonElement to a .NET Object?

以上是如何有效率地將 JsonElement 轉換為 .NET 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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