首页 >后端开发 >C++ >如何将 JSON 元素反序列化为 System.Text.Json 中的对象?

如何将 JSON 元素反序列化为 System.Text.Json 中的对象?

Linda Hamilton
Linda Hamilton原创
2025-01-08 15:42:401037浏览

How to Deserialize JSON Elements to Objects in System.Text.Json?

System.Text.Json 元素的反序列化

在 Newtonsoft.Json 中,ToObject() 方法通常用于将 JSON 令牌转换为强类型对象。但是,System.Text.Json 中没有 readily available 的等效方法。

.NET 6 的解决方法

在 .NET 6 及更高版本中,已向 JsonSerializer 添加扩展方法,可以直接从 JsonElementJsonDocument 反序列化对象。这允许使用以下语法:

<code class="language-csharp">using var jDoc = JsonDocument.Parse(str);
var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<SomeClass>();</code>

.NET 5 及更早版本的解决方法

对于 .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 语句,因为它是可以释放的。
  • 此解决方法适用于 .NET Core 3.1 和更高版本。

以上是如何将 JSON 元素反序列化为 System.Text.Json 中的对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

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