將 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中文網其他相關文章!