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