ホームページ > バックエンド開発 > C++ > C# でカスタム型マッピングを使用して、入れ子になった JSON を入れ子になった辞書に逆シリアル化する方法

C# でカスタム型マッピングを使用して、入れ子になった JSON を入れ子になった辞書に逆シリアル化する方法

Patricia Arquette
リリース: 2024-12-30 18:13:09
オリジナル
1008 人が閲覧しました

How to Deserialize Nested JSON to a Nested Dictionary with Custom Type Mapping in C#?

ネストされた JSON をネストされた辞書に逆シリアル化するカスタム JSON タイプ マッピングを使用する

JSON オブジェクトをネストされた辞書に逆シリアル化するこれは一般的なタスクですが、デフォルトの System.Text.Json 逆シリアル化では、多くの場合、すべての入れ子になったオブジェクトが JsonElement インスタンスとして表されます。より具体的な型マッピングを実現するには、カスタム JSON コンバーターが必要です。

型マッピング用のカスタム JSON コンバーター

次の ObjectAsPrimitiveConverter という名前のカスタム JSON コンバーターは、必要な機能を提供します。型マッピング:

  • 文字列 ->文字列
  • 数値 -> int/double
  • オブジェクト -> Dictionary

コンバータの実装

コンバータの Read メソッドと Write メソッドは、カスタムのマッピング:

  • 読み取り:

    • タイプに基づいて受信 JSON トークンを解析します。
    • 特定の.Net 型 (string、int、double、Dictionary など)、またはその型が使用できない場合は例外をスローします。 parsed.
  • Write:

    • カスタムの要求に応じて、空の JSON オブジェクトを書き込むことでオブジェクト タイプを処理します。

コンバーターの使用法

カスタム コンバーターを使用するには、逆シリアル化中に JsonSerializerOptions に追加する必要があります。

var options = new JsonSerializerOptions
{
    Converters = { new ObjectAsPrimitiveConverter() },
    WriteIndented = true,
};

dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);
ログイン後にコピー

設定Options

コンバーターには、いくつかの構成オプションが用意されています。

  • FloatFormat: 浮動小数点数を double または 10 進数として解析する必要があるかどうかを指定します。
  • UnknownNumberFormat: 数値の処理方法を決定しますこれは .Net プリミティブ型に解析できません。
  • ObjectFormat: JSON オブジェクトの出力型を Dictionary のいずれかとして構成します。

サンプル フィドル

ライブ デモンストレーションはここで利用できます: [サンプル フィドル](https://dotnetfiddle.net/tD9pPI)

以上がC# でカスタム型マッピングを使用して、入れ子になった JSON を入れ子になった辞書に逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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