首页 > 后端开发 > C++ > 如何将 JsonElement 转换为 .NET 的 System.Text.Json 中的对象?

如何将 JsonElement 转换为 .NET 的 System.Text.Json 中的对象?

Barbara Streisand
发布: 2025-01-08 15:27:40
原创
1040 人浏览过

.NET Core 3 及更高版本中,将 JsonElement 转换为对象的方法

本文探讨如何在 .NET Core 3 及更高版本中使用 System.Text.JsonJsonElement 转换为对象。System.Text.Json 是 .NET Core 3.0 中新的 JSON 处理库,它不包含 Json.NET 中的 ToObject() 方法的等效项,而该方法允许将 JToken 转换为类。

.NET 6 及更高版本:

从 .NET 6 开始,JsonSerializer 提供了扩展方法,可以直接从 JsonElementJsonDocument 反序列化:

<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>
登录后复制

使用这些方法,您可以轻松地从 JsonElement 反序列化对象:

<code class="language-csharp">var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<MyClass>();</code>
登录后复制

.NET 5 及更早版本:

在 .NET 的早期版本中,这些方法不可用。解决方法是将 JSON 写入中间字节缓冲区:

<code class="language-csharp">public static partial class JsonExtensions
{
    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);
    }
}</code>
登录后复制

此方法比先将 JsonElement 转换为字符串的性能更好。

注意事项:

  • JsonDocument 的释放: JsonDocument 使用的是池化内存,因此需要妥善释放(建议使用 using 语句)。
  • 新方法的可用性: 新的反序列化扩展方法在 .NET 6.0 Preview RC1 及更高版本中可用。
  • JsonNode 的类似方法: 对于可变的 JSON 文档节点 JsonNode,也存在类似的方法。

How to Convert a JsonElement to an Object in .NET's System.Text.Json?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板