.NET Core 3 以降では、JsonElement をオブジェクトに変換するメソッド
この記事では、.NET Core 3 以降で System.Text.Json
を使用して JsonElement
をオブジェクトに変換する方法について説明します。 System.Text.Json
は .NET Core 3.0 の新しい JSON 処理ライブラリであり、Json.NET
をクラスに変換できる ToObject()
の JToken
メソッドと同等のものは含まれていません。
.NET 6 以降:
.NET 6 以降、JsonSerializer
は、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>
これらのメソッドを使用すると、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
ステートメントを使用することをお勧めします)。 JsonNode
の同様のメソッド: 可変 JSON ドキュメント ノード JsonNode
にも同様のメソッドが存在します。 以上がJsonElement を .NET の System.Text.Json のオブジェクトに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。