首页 >后端开发 >C++ >如何高效地将 JsonElement 转换为 .NET 对象?

如何高效地将 JsonElement 转换为 .NET 对象?

Patricia Arquette
Patricia Arquette原创
2025-01-08 15:31:40768浏览

高效地将 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 版本提供了有效的解决方案。

How to Efficiently Convert JsonElement to a .NET Object?

以上是如何高效地将 JsonElement 转换为 .NET 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn