System.Text.Json 中的等效函数
Json.NET 框架提供了一个 ToObject()
方法来将 JToken 转换为类。但是,System.Text.Json 中没有这个方法的直接等效项。
针对 .NET 6 及更高版本的解决方法
在 .NET 6 中,引入了扩展方法,允许直接从 JsonElement 或 JsonDocument 反序列化对象。这些方法是:
<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>
示例:
<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>
以上是如何将 JsonElement 或 JsonDocument 转换为 System.Text.Json 中的对象?的详细内容。更多信息请关注PHP中文网其他相关文章!