ホームページ > バックエンド開発 > C++ > JsonElement を .NET の System.Text.Json のオブジェクトに変換するにはどうすればよいですか?

JsonElement を .NET の System.Text.Json のオブジェクトに変換するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-08 15:27:40
オリジナル
988 人が閲覧しました

.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 ステートメントを使用することをお勧めします)。
  • 新しいメソッドの利用可能性: 新しい逆シリアル化拡張メソッドは、.NET 6.0 Preview RC1 以降で利用できます。
  • JsonNode の同様のメソッド: 可変 JSON ドキュメント ノード JsonNode にも同様のメソッドが存在します。

How to Convert a JsonElement to an Object in .NET's System.Text.Json?

以上がJsonElement を .NET の System.Text.Json のオブジェクトに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート