ホームページ > バックエンド開発 > C++ > 混合型値の JSON 配列を厳密に型指定された C# オブジェクトに逆シリアル化する方法

混合型値の JSON 配列を厳密に型指定された C# オブジェクトに逆シリアル化する方法

Barbara Streisand
リリース: 2025-01-24 04:21:38
オリジナル
996 人が閲覧しました

How to Deserialize a JSON Array of Mixed-Type Values into Strongly Typed C# Objects?

混合型値の配列を厳密に型指定されたデータに逆シリアル化します

特定のスキーマを持つ JSON データを扱う場合、それを厳密に型指定されたデータ クラスに逆シリアル化すると、コードの保守性と明確さが向上します。この質問では、配列に混合型の値、特に整数と文字列が含まれている場合に、そのようなデータを逆シリアル化する方法を検討します。

重要な考慮事項

このタイプのデータを逆シリアル化するときに考慮すべき重要な要素が 2 つあります。

  1. プレーヤー コレクションの処理: プレーヤー データはユーザー名によってインデックス付けされ、文字列と整数が混在しています。これは、ユーザー名をキーとして辞書構造を使用し、各プレーヤーのデータを表す値のコレクションを使用できることを示唆しています。
  2. 名前のないプレーヤー プロパティ: プレーヤー データは、名前のない値の特定のシーケンスで構成されます。これらの値を Player オブジェクトのプロパティに割り当て、それらの値が正しいプロパティに確実にマッピングされるようにするメカニズムが必要です。

カスタムコンバーターの実装

これらの問題を解決するには、カスタム逆シリアル化コンバーターを実装できます。このコンバータは、Newtonsoft.Json の ObjectToArrayConverter<T> クラスを利用して C# で実装されています:

<code class="language-csharp">public class ObjectToArrayConverter<T> : JsonConverter
{
    // ... (为简洁起见,省略实现细节)
}</code>
ログイン後にコピー

プレイヤークラス定義

次に、Player クラスを定義し、注釈付きのプロパティを使用して逆シリアル化される順序を指定します。

<code class="language-csharp">[JsonConverter(typeof(ObjectToArrayConverter<Player>))]
public class Player
{
    [JsonProperty(Order = 1)]
    public int UniqueID { get; set; }

    [JsonProperty(Order = 2)]
    public string PlayerDescription { get; set; }

    // ... (根据需要添加其他属性)
}</code>
ログイン後にコピー

トップレベルのオブジェクト構造

最後に、ユーザー名をキーとしてプレーヤー データを辞書として表すように、トップレベルの ScoreboardResults クラスを調整する必要があります。

<code class="language-csharp">public class ScoreboardResults
{
    public int timestamp { get; set; }
    public int total_players { get; set; }
    public int max_score { get; set; }
    public Dictionary<string, Player[]> players { get; set; }
}</code>
ログイン後にコピー

逆シリアル化デモ

カスタムコンバーターと注釈付きプロパティを使用して、JSON データを厳密に型指定されたオブジェクトに逆シリアル化できるようになりました。

<code class="language-json">{
    "timestamp": 1473730993,
    "total_players": 945,
    "max_score": 8961474,
    "players": {
            "Player1Username": [
            121,
            "somestring",
            679900,
            5,
            4497,
            "anotherString",
            "thirdString",
            "fourthString",
            123,
            22,
            "YetAnotherString"],
        "Player2Username": [
            886,
            "stillAstring",
            1677,
            1,
            9876,
            "alwaysAstring",
            "thirdString",
            "fourthString",
            876,
            77,
            "string"]
        }
}</code>
ログイン後にコピー

の結果は、ScoreboardResults オブジェクトのディクショナリを含む塗りつぶされた Player オブジェクトになります。各オブジェクトには、それぞれのプロパティに期待される値が含まれます。

この改訂された出力は、元のイメージを維持し、JSON 逆シリアル化プロセスのより簡潔で技術的に正確な説明を提供します。また、コード例もわかりやすくするために改良されています。

以上が混合型値の JSON 配列を厳密に型指定された C# オブジェクトに逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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