高效地将 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中文网其他相关文章!