首页 > 后端开发 > C++ > 在 C# 中将 JsonConvert.DeserializeObject 与嵌套集合一起使用时如何解决 JSON 反序列化错误?

在 C# 中将 JsonConvert.DeserializeObject 与嵌套集合一起使用时如何解决 JSON 反序列化错误?

Mary-Kate Olsen
发布: 2025-01-15 11:55:43
原创
720 人浏览过

How to Resolve JSON Deserialization Errors When Using JsonConvert.DeserializeObject with Nested Collections in C#?

将 JSON 反序列化为 C# POCO 类:解决嵌套集合问题

使用 JsonConvert.DeserializeObject 将 JSON 数据转换为 C# 普通旧 CLR 对象 (POCO) 通常很简单。然而,处理嵌套集合时可能会出现挑战。

问题:

考虑具有嵌套 accountsbadges 集合的 User POCO。 尝试反序列化可能会引发异常,指示 accounts 属性(预期为类似 List<T> 的集合)被视为 JSON 对象。

解决方案:

解决方案涉及两个关键方面:

1。 正确定义 accounts 属性:

C# POCO 类必须将 accounts 属性声明为对象,镜像 JSON 结构。 这通常意味着创建一个单独的 Account 类来表示帐户数据。

2。利用 JsonProperty 属性:

JsonProperty 属性对于将 JSON 属性名称映射到相应的 C# 属性至关重要。这确保了准确的反序列化。

示例:

此示例演示了成功将 JSON 反序列化为 POCO 类,处理嵌套集合:

<code class="language-csharp">using Newtonsoft.Json;
using System.Net;

public class Example
{
    public static void Main(string[] args)
    {
        using (WebClient wc = new WebClient())
        {
            string json = wc.DownloadString("http://coderwall.com/mdeiters.json"); // Replace with your JSON source
            User user = JsonConvert.DeserializeObject<User>(json);
            // Access user properties here...
        }
    }
}

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("endorsements")]
    public int Endorsements { get; set; }

    [JsonProperty("team")]
    public string Team { get; set; }

    [JsonProperty("accounts")]
    public Account Accounts { get; set; }

    [JsonProperty("badges")]
    public List<Badge> Badges { get; set; }
}

public class Account
{
    [JsonProperty("github")] // Assuming 'github' is a property in the JSON
    public string Github { get; set; }
}

public class Badge
{
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("description")]
    public string Description { get; set; }
    [JsonProperty("created")]
    public string Created { get; set; }
    [JsonProperty("badge")]
    public string BadgeUrl { get; set; }
}</code>
登录后复制

通过遵循这些准则,您可以有效地将具有嵌套集合的 JSON 数据反序列化到 C# POCO 类中,即使 JSON 结构与简单列表表示略有不同。 请记住将 "http://coderwall.com/mdeiters.json" 替换为您的实际 JSON 数据源。 另请注意在嵌套类中添加 Newtonsoft.Json using 语句和显式属性声明。

以上是在 C# 中将 JsonConvert.DeserializeObject 与嵌套集合一起使用时如何解决 JSON 反序列化错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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