在 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中文网其他相关文章!