利用JsonConvert.DeserializeObject將JSON解析到C# POCO類別
在將JSON反序列化到C# POCO類別時遇到錯誤(例如「無法反序列化…」異常)時,理解成功反序列化的要求至關重要。
具體來說,JsonConvert.DeserializeObject
方法要求JSON符合POCO類別中定義的預期結構和資料類型。
解決錯誤
解決此錯誤的關鍵在於兩個方面:
正確聲明列表屬性:
確保JSON回應中包含一個物件數組,用於在POCO類別中聲明為List<T>
的屬性。例如:
<code class="language-json"> { "username": "username", // ... 其他属性 "accounts": [ { "github": "github-username" }, // ... 其他帐户 ] }</code>
在POCO類中,Accounts
屬性應宣告為:
<code class="language-csharp"> [JsonProperty("accounts")] public List<Account> Accounts { get; set; }</code>
使用JsonProperty屬性:
JsonProperty
屬性將JSON屬性名稱對應到對應的POCO類別屬性。預設情況下,JSON屬性名稱區分大小寫,並與C#屬性名稱相符。若要自訂此映射,請使用JsonProperty
屬性:
<code class="language-csharp"> [JsonProperty("github")] public string GithubUsername { get; set; }</code>
範例
這是一個修正後的範例:
<code class="language-csharp">public class User { [JsonProperty("username")] public string Username { get; set; } // ... 其他属性 [JsonProperty("accounts")] public List<Account> Accounts { get; set; } } public class Account { [JsonProperty("github")] public string GithubUsername { get; set; } } // 反序列化代码 var json = @"{ 'username': 'jdoe', // ... 其他属性 'accounts': [{ 'github': 'jdoe-github' }] }"; var user = JsonConvert.DeserializeObject<User>(json);</code>
以上是如何使用 JsonConvert.DeserializeObject 成功將 JSON 反序列化為 C# POCO 類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!