在 Newtonsoft.Json 中,ToObject()
方法通常用於將 JSON 令牌轉換為強型別物件。但是,System.Text.Json 中沒有 readily available 的等效方法。
在 .NET 6 及更高版本中,已向 JsonSerializer
添加擴展方法,可以直接從 JsonElement
或 JsonDocument
反序列化物件。這允許使用以下語法:
<code class="language-csharp">using var jDoc = JsonDocument.Parse(str); var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<SomeClass>();</code>
對於 .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>
說明:
JsonDocument
使用 using
語句,因為它是可以釋放的。 以上是如何將 JSON 元素反序列化為 System.Text.Json 中的物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!