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

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

Barbara Streisand
發布: 2025-01-15 11:04:44
原創
953 人瀏覽過

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:

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; }
}
登入後複製

當嘗試使用JsonConvert.DeserializeObject將JSON反序列化到此類時,會拋出異常,指示JSON數組無法反序列化為Account列表。

解:

要解決此問題,需要考慮兩個關鍵點:

1. 將Accounts屬性宣告為物件:

更改Accounts屬性聲明以表示物件而不是清單。

User.cs(更新):

public class User
{
    // ...
    [JsonProperty("accounts")]
    public Account Accounts { get; set; }
}
登入後複製

2. 使用JsonProperty屬性:

將JsonProperty屬性套用至每個屬性,以將JSON屬性名稱對應到C#屬性名稱。

User.cs(使用JsonProperty):

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; }
}
登入後複製

附加類別(Account和Badge):

為任何嵌套物件(例如Accounts和Badges)定義附加類,並相應地應用JsonProperty屬性。

Account.cs:

public class Account
{
    [JsonProperty("github")]
    public string Github { get; set; }
}
登入後複製

Badge.cs:

public class Badge
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("description")]
    public string Description { get; set; }

    // ...
}
登入後複製

範例用法:

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);
        }
    }
}
登入後複製

透過這些更改,JsonConvert.DeserializeObject現在可以成功地將JSON反序列化到User POCO類,並適當地處理巢狀物件(Accounts)。

以上是將 JSON 反序列化為 C# POCO 類別時如何解決 JsonConvert.DeserializeObject 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板