.NET Core 3 及更高版本中,將 JsonElement 轉換為物件的方法
本文探討如何在 .NET Core 3 及更高版本中使用 System.Text.Json
將 JsonElement
轉換為物件。 System.Text.Json
是 .NET Core 3.0 中新的 JSON 處理庫,它不包含 Json.NET
中的 ToObject()
方法的等效項,而該方法允許將 JToken
轉換為類別。
.NET 6 及更高版本:
從 .NET 6 開始,JsonSerializer
提供了擴展方法,可以直接從 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>
使用這些方法,您可以輕鬆地從 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
語句)。 JsonNode
的類似方法: 對於可變的 JSON 文件節點 JsonNode
,也存在類似的方法。 以上是如何將 JsonElement 轉換為 .NET 的 System.Text.Json 中的物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!