首页 > 后端开发 > C++ > 将 JSON 反序列化为 C# POCO 类时如何解决 JsonConvert.DeserializeObject 错误?

将 JSON 反序列化为 C# POCO 类时如何解决 JsonConvert.DeserializeObject 错误?

Barbara Streisand
发布: 2025-01-15 11:04:44
原创
861 人浏览过

How to Resolve JsonConvert.DeserializeObject Errors When Deserializing JSON into C# POCO Classes?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板