ホームページ > バックエンド開発 > C++ > C# で動的なキー名を使用して JSON を逆シリアル化するにはどうすればよいですか?

C# で動的なキー名を使用して JSON を逆シリアル化するにはどうすればよいですか?

DDD
リリース: 2025-01-07 12:41:45
オリジナル
487 人が閲覧しました

How can I deserialize JSON with dynamic key names in C#?

動的キー名を使用した子オブジェクトの逆シリアル化

はじめに

さまざまなキー名を使用して JSON データをシリアル化すると、逆シリアル化で問題が発生します。この記事では、C# の動的プロパティ パターンを使用した解決策を検討します。

問題ステートメント

以下の JSON データを考慮すると、動的な「数値」キーを維持しながらデータを逆シリアル化するにはどうすればよいですか?

{
    "users" : {
        "100034" : {
            "name"  : "tom",
            "state" : "WA",
            "id"    : "cedf-c56f-18a4-4b1"
        },
        "10045" : {
            "name"  : "steve",
            "state" : "NY",
            "id"    : "ebb2-92bf-3062-7774"
        },
        "12345" : {
            "name"  : "mike",
            "state" : "MA",
            "id"    : "fb60-b34f-6dc8-aaf7"
        }
    }
}
ログイン後にコピー

ソリューション

動的プロパティパターン

Dictionary を使用してさまざまなキーを表すことができます。ここで、T は子オブジェクト データを含むクラスです。この場合、次のクラスを宣言します。

class RootObject
{
    public Dictionary<string, User> users { get; set; }
}

class User
{
    public string name { get; set; }
    public string state { get; set; }
    public string id { get; set; }
}
ログイン後にコピー

逆シリアル化

動的プロパティ パターンを使用して JSON を逆シリアル化するには、次のコードを使用します。

RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
ログイン後にコピー

これにより、Dictionary を使用して RootObject のインスタンスが作成されます。

オブジェクト データへのアクセス

これで、ユーザー ディクショナリを反復処理することで、それぞれのキーを使用して各子オブジェクトにアクセスできるようになります。

foreach (string key in root.users.Keys)
{
    User user = root.users[key];
    // Access user properties using user.name, user.state, user.id
}
ログイン後にコピー

デモ

次の C# コードはデモを示しますプロセス全体:

class Program
{
    static void Main(string[] args)
    {
        string json = @"
        {
            ""users"": {
                ""10045"": {
                    ""name"": ""steve"",
                    ""state"": ""NY"",
                    ""id"": ""ebb2-92bf-3062-7774""
                },
                ""12345"": {
                    ""name"": ""mike"",
                    ""state"": ""MA"",
                    ""id"": ""fb60-b34f-6dc8-aaf7""
                },
                ""100034"": {
                    ""name"": ""tom"",
                    ""state"": ""WA"",
                    ""id"": ""cedf-c56f-18a4-4b1""
                }
            }
        }";

        RootObject root = JsonConvert.DeserializeObject<RootObject>(json);

        // Iterate over users and print their data
        foreach (string key in root.users.Keys)
        {
            User user = root.users[key];
            Console.WriteLine("key: " + key);
            Console.WriteLine("name: " + user.name);
            Console.WriteLine("state: " + user.state);
            Console.WriteLine("id: " + user.id);
            Console.WriteLine();
        }
    }
}
ログイン後にコピー

出力

key: 10045
name: steve
state: NY
id: ebb2-92bf-3062-7774

key: 12345
name: mike
state: MA
id: fb60-b34f-6dc8-aaf7

key: 100034
name: tom
state: WA
id: cedf-c56f-18a4-4b1
ログイン後にコピー

以上がC# で動的なキー名を使用して JSON を逆シリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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