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

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

Patricia Arquette
リリース: 2025-01-24 04:26:10
オリジナル
921 人が閲覧しました

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

固定パターンを持つ値の配列を厳密に型指定されたデータ クラスに逆シリアル化します

質問:

特定の形式の JSON データを厳密に型指定されたデータ クラスに逆シリアル化する場合には課題があります。データには、文字列と整数値が混在したプレーヤーの配列が含まれており、プレーヤー クラスは完全に名前のない値で、固定された順序で構成されています。

解決策:

カスタム コンバーターとデータ コントラクト属性を組み合わせることで、効率的な逆シリアル化が可能になります。

  1. カスタムコンバーターを作成します:

    オブジェクトを配列に変換するカスタムコンバータを実装します:

    <code class="language-c#">public class ObjectToArrayConverter<T> : JsonConverter
    {
        // 实现 WriteJson 和 ReadJson 函数
    }</code>
    ログイン後にコピー
  2. カスタム コンバーターとデータ コントラクト プロパティをプレーヤーに適用します:

    カスタム コンバータを Player クラスに適用し、データ コントラクト属性を使用してそのプロパティの順序を指定します。

    <code class="language-c#">[JsonConverter(typeof(ObjectToArrayConverter<Player>))]
    [DataContract]
    public class Player
    {
        [DataMember(Order = 1)]
        public int UniqueID { get; set; }
        [DataMember(Order = 2)]
        public string PlayerDescription { get; set; }
    }</code>
    ログイン後にコピー
  3. ルート オブジェクトを辞書に変更します:

    プレーヤーのユーザー名をキーとして使用して、ルート オブジェクトのプレーヤー属性のタイプを辞書に変更します。

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

例:

次のコード例は、このソリューションを使用した逆シリアル化を示しています。

<code class="language-c#">using Newtonsoft.Json;

var json = "{...}";
var results = JsonConvert.DeserializeObject<ScoreboardResults>(json);</code>
ログイン後にコピー

その他の指示:

  • データ コントラクト属性を使用する場合は、System.Runtime.Serialization 名前空間への参照を必ず追加してください。
  • このソリューションは、既知のプロパティ名を持つ固定スキーマを前提としています。動的モードの場合、より高度な逆シリアル化技術が必要になる場合があります。

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

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