有效率地將 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 版本提供了有效的解決方案。
以上是如何有效率地將 JsonElement 轉換為 .NET 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!