首頁 >後端開發 >C++ >將 JSON 反序列化為 C# POCO 類別時如何解決 JsonConvert.DeserializeObject 錯誤?

將 JSON 反序列化為 C# POCO 類別時如何解決 JsonConvert.DeserializeObject 錯誤?

Barbara Streisand
Barbara Streisand原創
2025-01-15 11:04:44919瀏覽

How to Resolve JsonConvert.DeserializeObject Errors When Deserializing JSON into C# POCO Classes?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn