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中文網其他相關文章!