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 サイトの他の関連記事を参照してください。