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

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

Barbara Streisand
發布: 2025-01-08 15:27:40
原創
988 人瀏覽過

.NET Core 3 及更高版本中,將 JsonElement 轉換為物件的方法

本文探討如何在 .NET Core 3 及更高版本中使用 System.Text.JsonJsonElement 轉換為物件。 System.Text.Json 是 .NET Core 3.0 中新的 JSON 處理庫,它不包含 Json.NET 中的 ToObject() 方法的等效項,而該方法允許將 JToken 轉換為類別。

.NET 6 及更高版本:

從 .NET 6 開始,JsonSerializer 提供了擴展方法,可以直接從 JsonElementJsonDocument 反序列化:

<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>
登入後複製

使用這些方法,您可以輕鬆地從 JsonElement 反序列化物件:

<code class="language-csharp">var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<MyClass>();</code>
登入後複製

.NET 5 及更早版本:

在 .NET 的早期版本中,這些方法不可用。解決方法是將 JSON 寫入中間位元組緩衝區:

<code class="language-csharp">public static partial class JsonExtensions
{
    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>
登入後複製

此方法比先將 JsonElement 轉換為字串的效能更好。

注意事項:

  • JsonDocument 的釋放: JsonDocument 使用的是池化內存,因此需要妥善釋放(建議使用 using 語句)。
  • 新方法的可用性: 新的反序列化擴展方法在 .NET 6.0 Preview RC1 及更高版本中可用。
  • JsonNode 的類似方法: 對於可變的 JSON 文件節點 JsonNode,也存在類似的方法。

How to Convert a JsonElement to an Object in .NET's System.Text.Json?

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

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