利用JsonConvert.DeserializeObject将JSON解析到C# POCO类
在将JSON反序列化到C# POCO类时遇到错误(例如“无法反序列化...”异常)时,理解成功反序列化的要求至关重要。
具体来说,JsonConvert.DeserializeObject
方法要求JSON符合POCO类中定义的预期结构和数据类型。
解决错误
解决此错误的关键在于两个方面:
正确声明列表属性:
确保JSON响应中包含一个对象数组,用于在POCO类中声明为List<T>
的属性。例如:
<code class="language-json"> { "username": "username", // ... 其他属性 "accounts": [ { "github": "github-username" }, // ... 其他帐户 ] }</code>
在POCO类中,Accounts
属性应声明为:
<code class="language-csharp"> [JsonProperty("accounts")] public List<Account> Accounts { get; set; }</code>
使用JsonProperty属性:
JsonProperty
属性将JSON属性名称映射到相应的POCO类属性。默认情况下,JSON属性名称区分大小写,并与C#属性名称匹配。要自定义此映射,请使用JsonProperty
属性:
<code class="language-csharp"> [JsonProperty("github")] public string GithubUsername { get; set; }</code>
示例
这是一个修正后的示例:
<code class="language-csharp">public class User { [JsonProperty("username")] public string Username { get; set; } // ... 其他属性 [JsonProperty("accounts")] public List<Account> Accounts { get; set; } } public class Account { [JsonProperty("github")] public string GithubUsername { get; set; } } // 反序列化代码 var json = @"{ 'username': 'jdoe', // ... 其他属性 'accounts': [{ 'github': 'jdoe-github' }] }"; var user = JsonConvert.DeserializeObject<User>(json);</code>
以上是如何使用 JsonConvert.DeserializeObject 成功将 JSON 反序列化为 C# POCO 类?的详细内容。更多信息请关注PHP中文网其他相关文章!