JsonElement を .NET オブジェクトに効率的に変換する
.NET Core 3.0 で導入された System.Text.Json は、高性能の JSON 処理ソリューションを提供します。 ただし、Json.NET とは異なり、.NET 6 までは、ToObject
を .NET オブジェクトに簡単に変換するための JsonElement
メソッドに直接相当するものがありませんでした。
.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 バージョンに効率的なソリューションを提供します。
以上がJsonElement を .NET オブジェクトに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。