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

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

Linda Hamilton
Linda Hamilton原创
2025-01-08 15:37:46987浏览

How to Convert JsonElement to a Strongly-Typed Object in System.Text.Json?

System.Text.Json.JsonElement 的 ToObject 等效方法

概念

在 .NET Core 3 中,Json.NET 库提供了 ToObject 方法,允许将 JToken 对象转换为强类型类。本文探讨了在 System.Text.Json 中反序列化 JsonElement 对象的等效方法。

解决方案

在 .NET 6 及更高版本中:

JsonSerializer 已添加扩展方法,可以直接从 JsonElement 和 JsonDocument 对象反序列化:

<code class="language-csharp">public static TValue? Deserialize<TValue>(this JsonDocument document, JsonSerializerOptions? options = null);
public static TValue? Deserialize<TValue>(this JsonElement element, JsonSerializerOptions? options = null);</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);
}</code>

示例

<code class="language-csharp">var str = ""; // 一些 JSON 字符串
var jDoc = JsonDocument.Parse(str);
var myClass = jDoc.RootElement.GetProperty("SomeProperty").Deserialize<SomeClass>();</code>

注意

  • 释放 JsonDocument 对象以释放内存资源。
  • .NET 6 中为 JsonNode 添加了扩展方法,用于类似的反序列化功能。
  • 变通方法的性能更好,因为它避免了不必要的字符串转换。

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

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