JsonConvert.DeserializeObject:将JSON反序列化为C# POCO类
在处理RESTful API时,通常需要将JSON响应反序列化为C#普通旧CLR对象(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数组无法反序列化为Account列表。
解决方案:
要解决此问题,需要考虑两个关键点:
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>
附加类(Account和Badge):
为任何嵌套对象(例如Accounts和Badges)定义附加类,并相应地应用JsonProperty属性。
Account.cs:
<code class="language-c#">public class Account { [JsonProperty("github")] public string Github { get; set; } }</code>
Badge.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类,并适当地处理嵌套对象(Accounts)。
以上是将 JSON 反序列化为 C# POCO 类时如何解决 JsonConvert.DeserializeObject 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!