ホームページ > バックエンド開発 > C++ > C# で入れ子になったコレクションで JsonConvert.DeserializeObject を使用する場合の JSON 逆シリアル化エラーを解決する方法

C# で入れ子になったコレクションで JsonConvert.DeserializeObject を使用する場合の JSON 逆シリアル化エラーを解決する方法

Mary-Kate Olsen
リリース: 2025-01-15 11:55:43
オリジナル
720 人が閲覧しました

How to Resolve JSON Deserialization Errors When Using JsonConvert.DeserializeObject with Nested Collections in C#?

JSON を C# POCO クラスに逆シリアル化する: ネストされたコレクションの問題に対処する

JsonConvert.DeserializeObject を使用して JSON データを C# Plain Old CLR Object (POCO) に変換するのは、通常は簡単です。ただし、ネストされたコレクションを扱う場合には問題が発生する可能性があります。

問題:

ネストされた accounts および badges コレクションを持つユーザー POCO を考えてみましょう。 逆シリアル化を試行すると、accounts プロパティ (List<T> のようなコレクションとして期待される) が JSON オブジェクトとして扱われていることを示す例外がスローされる場合があります。

解決策:

この解決策には 2 つの重要な側面が含まれます:

1. accounts プロパティの正しい定義:

C# POCO クラスは、JSON 構造をミラーリングして、accounts プロパティをオブジェクトとして宣言する必要があります。 これは通常、アカウント データを表す別の Account クラスを作成することを意味します。

2. JsonProperty 属性の活用:

JsonProperty 属性は、JSON プロパティ名を対応する C# プロパティにマッピングするために重要です。これにより、正確な逆シリアル化が保証されます。

例:

この例は、ネストされたコレクションを処理しながら、POCO クラスへの JSON の逆シリアル化が成功する例を示しています。

<code class="language-csharp">using Newtonsoft.Json;
using System.Net;

public class Example
{
    public static void Main(string[] args)
    {
        using (WebClient wc = new WebClient())
        {
            string json = wc.DownloadString("http://coderwall.com/mdeiters.json"); // Replace with your JSON source
            User user = JsonConvert.DeserializeObject<User>(json);
            // Access user properties here...
        }
    }
}

public class User
{
    [JsonProperty("username")]
    public string Username { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("location")]
    public string Location { get; set; }

    [JsonProperty("endorsements")]
    public int Endorsements { get; set; }

    [JsonProperty("team")]
    public string Team { get; set; }

    [JsonProperty("accounts")]
    public Account Accounts { get; set; }

    [JsonProperty("badges")]
    public List<Badge> Badges { get; set; }
}

public class Account
{
    [JsonProperty("github")] // Assuming 'github' is a property in the JSON
    public string Github { get; set; }
}

public class Badge
{
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("description")]
    public string Description { get; set; }
    [JsonProperty("created")]
    public string Created { get; set; }
    [JsonProperty("badge")]
    public string BadgeUrl { get; set; }
}</code>
ログイン後にコピー

これらのガイドラインに従うことで、JSON 構造が単純なリスト表現と若干異なる場合でも、ネストされたコレクションを含む JSON データを C# POCO クラスに効果的に逆シリアル化できます。 "http://coderwall.com/mdeiters.json" を実際の JSON データ ソースに置き換えることを忘れないでください。 また、Newtonsoft.Json using ステートメントの追加と、ネストされたクラス内の明示的なプロパティ宣言にも注意してください。

以上がC# で入れ子になったコレクションで JsonConvert.DeserializeObject を使用する場合の JSON 逆シリアル化エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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