将 JSON 反序列化为 C# POCO 类:解决嵌套集合问题
使用 JsonConvert.DeserializeObject
将 JSON 数据转换为 C# 普通旧 CLR 对象 (POCO) 通常很简单。然而,处理嵌套集合时可能会出现挑战。
问题:
考虑具有嵌套 accounts
和 badges
集合的 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中文网其他相关文章!