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

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

Susan Sarandon
リリース: 2025-01-24 04:11:08
オリジナル
384 人が閲覧しました

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

データ型が混在する JSON 配列を C# クラスに逆シリアル化する

このガイドでは、構造が厳密に型指定された C# クラスへの直接マッピングの課題を提示する JSON データの逆シリアル化の複雑さに対処します。 具体的には、一見辞書のような構造内に混合データ型の配列が含まれるシナリオに取り組みます。

問題:

一般的な JSON 構造では、次のようなデータが表示されます。

  • 名前のない配列: 値の配列には明示的なプロパティ名がないため、直接の逆シリアル化が困難になります。
  • 混合データ型: 配列には、さまざまな型 (整数、文字列など) の要素が含まれます。
  • 辞書のような構造: 全体の構造は辞書に似ていますが、値は問題のある配列です。

解決策:

いくつかのテクニックでこれらの障害を克服できます:

1. ObjectToArrayConverter の活用:

Json.NET の ObjectToArrayConverter は、値の配列を C# オブジェクトのプロパティにマップする強力なメカニズムを提供します。 これには、プロパティの順序を慎重に考慮する必要があります。

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

JsonProperty 属性の Order プロパティは重要です。これにより、シーケンスに基づいて配列要素がプロパティに正しくマッピングされることが保証されます。

2.ルートオブジェクトの再構築:

より単純なアプローチには、データの辞書のような性質を直接表すためにルート オブジェクトを再構築することが含まれる場合があります。

<code class="language-csharp">public class ScoreboardResults
{
    // ... other properties
    public Dictionary<string, Player> Players { get; set; }
}</code>
ログイン後にコピー

辞書のキーと値が JSON 構造に直接対応するため、逆シリアル化が大幅に簡素化されます。

3.カスタムコンバーター (上級):

複雑なシナリオの場合、カスタム JsonConverter が最大限の制御を提供します。 これにより、特定の JSON 構造に合わせた複雑な解析ロジックが可能になります。

例 (ObjectToArrayConverter を使用):

<code class="language-csharp">// Sample JSON (replace with your actual JSON)
string jsonString = "...";

// Deserialize using ObjectToArrayConverter
var results = JsonConvert.DeserializeObject<ScoreboardResults>(jsonString);

// Access player data
foreach (var kvp in results.Players)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value.UniqueID} - {kvp.Value.PlayerDescription}");
}</code>
ログイン後にコピー

Json.NET 機能用の Newtonsoft.Json NuGet パッケージを忘れずにインストールしてください。 JSON の構造と複雑さに最も適したソリューションを選択してください。 多くの場合、ルート オブジェクトを再構築すると、最も単純で保守しやすい解決策が得られます。 ObjectToArrayConverter は、正確なプロパティ順序制御が必要な、より複雑なシナリオに最適な強力なツールです。 カスタム コンバーターは、他の方法では不十分な場合にのみ検討してください。

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

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