JsonConvert.DeserializeObject: JSON を C# POCO クラスに逆シリアル化します
RESTful API を扱う場合、多くの場合、JSON 応答を C# Plain Old CLR Objects (POCO) に逆シリアル化する必要があります。一般的に使用されるメソッドは JsonConvert.DeserializeObject です。
質問:
次の User POCO クラスについて考えてみましょう:
User.cs:
<code class="language-c#">public class User { public string Username { get; set; } public string Name { get; set; } public string Location { get; set; } // ... [JsonProperty("accounts")] public List<Account> Accounts { get; set; } }</code>
JsonConvert.DeserializeObject を使用して JSON をこのクラスに逆シリアル化しようとすると、JSON 配列をアカウントのリストに逆シリアル化できないことを示す例外がスローされます。
解決策:
この問題を解決するには、考慮すべき重要な点が 2 つあります:
1. Accounts プロパティをオブジェクトとして宣言します:
リストではなくオブジェクトを表すように Accounts プロパティ宣言を変更します。
User.cs (更新):
<code class="language-c#">public class User { // ... [JsonProperty("accounts")] public Account Accounts { get; set; } }</code>
2. JsonProperty 属性を使用します:
JsonProperty 属性を各プロパティに適用して、JSON プロパティ名を C# プロパティ名にマップします。
User.cs (JsonProperty を使用):
<code class="language-c#">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("accounts")] public Account Accounts { get; set; } }</code>
追加クラス (アカウントとバッジ):
アカウントやバッジなどのネストされたオブジェクトの追加クラスを定義し、それに応じて JsonProperty プロパティを適用します。
Account.cs:
<code class="language-c#">public class Account { [JsonProperty("github")] public string Github { get; set; } }</code>
バッジ.cs:
<code class="language-c#">public class Badge { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } // ... }</code>
使用例:
<code class="language-c#">using Newtonsoft.Json; using System.Net; class Program { static User LoadUserFromJson(string response) { var user = JsonConvert.DeserializeObject<User>(response); return user; } static void Main() { using (WebClient wc = new WebClient()) { var json = wc.DownloadString("http://coderwall.com/mdeiters.json"); var user = LoadUserFromJson(json); } } }</code>
これらの変更により、JsonConvert.DeserializeObject は JSON を User POCO クラスに正常に逆シリアル化し、ネストされたオブジェクト (アカウント) を適切に処理できるようになりました。
以上がJSON を C# POCO クラスに逆シリアル化するときに発生する JsonConvert.DeserializeObject エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。