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

混合データの JSON 配列を厳密に型指定された C# クラスに逆シリアル化する方法

Linda Hamilton
リリース: 2025-01-24 04:06:09
オリジナル
591 人が閲覧しました

この記事では、混合データ型を含む JSON 配列を厳密に型指定された C# クラスに逆シリアル化する方法を説明します。 問題は、辞書の値が名前のない要素の配列である JSON の一貫性のないスキーマにあります。

How to Deserialize a JSON Array of Mixed Data into Strongly Typed C# Classes?

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>
ログイン後にコピー

このソリューションでは、Newtonsoft.Json とカスタム コンバーター ObjectToArrayConverter<T> を使用して、名前のない配列要素を Player クラスのプロパティにマップします。 JsonProperty パラメータを伴う Order 属性は、配列要素をその位置に基づいてクラス プロパティに正しくマッピングするために重要です。

ここでは主要なクラスを簡略化して表現します:

プレイヤークラス:

<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; }
    // ... other properties ...
}</code>
ログイン後にコピー

ObjectToArrayConverter<T> クラス (簡潔にするために実装は省略) は変換ロジックを処理します。 ルート オブジェクト ScoreboardResults は、JSON 構造全体を保持するように定義されています:

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>
ログイン後にコピー

または、DataContract 属性と DataMember 属性でも、プロパティの順序を指定することで同様の結果を得ることができます。 この記事では、完全なコード例については、デモ フィドル (リンクはここには含まれていません) を参照することを提案しています。 このアプローチは、複雑で一貫性のない構造の JSON データを、厳密に型指定された C# オブジェクトに逆シリアル化する処理を効果的に処理します。

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

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