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

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

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

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:

1

2

3

4

5

6

7

8

9

<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(更新):

1

2

3

4

5

6

<code class="language-c#">public class User

{

    // ...

    [JsonProperty("accounts")]

    public Account Accounts { get; set; }

}</code>

登入後複製

2. 使用JsonProperty屬性:

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

User.cs(使用JsonProperty):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<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:

1

2

3

4

5

<code class="language-c#">public class Account

{

    [JsonProperty("github")]

    public string Github { get; set; }

}</code>

登入後複製

Badge.cs:

1

2

3

4

5

6

7

8

9

10

<code class="language-c#">public class Badge

{

    [JsonProperty("name")]

    public string Name { get; set; }

 

    [JsonProperty("description")]

    public string Description { get; set; }

 

    // ...

}</code>

登入後複製

範例用法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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

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