首页 >后端开发 >C++ >如何使用 JsonConvert.DeserializeObject 成功将 JSON 反序列化为 C# POCO 类?

如何使用 JsonConvert.DeserializeObject 成功将 JSON 反序列化为 C# POCO 类?

Barbara Streisand
Barbara Streisand原创
2025-01-15 11:42:43472浏览

How to Successfully Deserialize JSON into a C# POCO Class Using JsonConvert.DeserializeObject?

利用JsonConvert.DeserializeObject将JSON解析到C# POCO类

在将JSON反序列化到C# POCO类时遇到错误(例如“无法反序列化...”异常)时,理解成功反序列化的要求至关重要。

具体来说,JsonConvert.DeserializeObject 方法要求JSON符合POCO类中定义的预期结构和数据类型。

解决错误

解决此错误的关键在于两个方面:

  1. 正确声明列表属性: 确保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>
  2. 使用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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn