特定のスキーマを持つ JSON データを扱う場合、それを厳密に型指定されたデータ クラスに逆シリアル化すると、コードの保守性と明確さが向上します。この質問では、配列に混合型の値、特に整数と文字列が含まれている場合に、そのようなデータを逆シリアル化する方法を検討します。
このタイプのデータを逆シリアル化するときに考慮すべき重要な要素が 2 つあります。
これらの問題を解決するには、カスタム逆シリアル化コンバーターを実装できます。このコンバータは、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 サイトの他の関連記事を参照してください。