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

JsonElement を .NET オブジェクトに効率的に変換するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-08 15:31:40
オリジナル
811 人が閲覧しました

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 バージョンに効率的なソリューションを提供します。

How to Efficiently Convert JsonElement to a .NET Object?

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

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