首頁 > 後端開發 > C++ > 在 C# 中將 JsonConvert.DeserializeObject 與巢狀集合一起使用時如何解決 JSON 反序列化錯誤?

在 C# 中將 JsonConvert.DeserializeObject 與巢狀集合一起使用時如何解決 JSON 反序列化錯誤?

Mary-Kate Olsen
發布: 2025-01-15 11:55:43
原創
720 人瀏覽過

How to Resolve JSON Deserialization Errors When Using JsonConvert.DeserializeObject with Nested Collections in C#?

將 JSON 反序列化為 C# POCO 類別:解決巢狀集合問題

使用 JsonConvert.DeserializeObject 將 JSON 資料轉換為 C# 普通舊 CLR 物件 (POCO) 通常很簡單。然而,處理嵌套集合時可能會出現挑戰。

問題:

考慮具有巢狀 accountsbadges 集合的 User POCO。 嘗試反序列化可能會引發異常,指示 accounts 屬性(預期為類似 List<T> 的集合)被視為 JSON 物件。

解:

解決方案涉及兩個關鍵方面:

1。 正確定義 accounts 屬性:

C# POCO 類別必須將 accounts 屬性宣告為對象,鏡像 JSON 結構。 這通常意味著建立一個單獨的 Account 類別來表示帳戶資料。

2。利用 JsonProperty 屬性:

JsonProperty 屬性對於將 JSON 屬性名稱對應到對應的 C# 屬性至關重要。這確保了準確的反序列化。

範例:

此範例示範了成功將 JSON 反序列化為 POCO 類,處理巢狀集合:

<code class="language-csharp">using Newtonsoft.Json;
using System.Net;

public class Example
{
    public static void Main(string[] args)
    {
        using (WebClient wc = new WebClient())
        {
            string json = wc.DownloadString("http://coderwall.com/mdeiters.json"); // Replace with your JSON source
            User user = JsonConvert.DeserializeObject<User>(json);
            // Access user properties here...
        }
    }
}

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("endorsements")]
    public int Endorsements { get; set; }

    [JsonProperty("team")]
    public string Team { get; set; }

    [JsonProperty("accounts")]
    public Account Accounts { get; set; }

    [JsonProperty("badges")]
    public List<Badge> Badges { get; set; }
}

public class Account
{
    [JsonProperty("github")] // Assuming 'github' is a property in the JSON
    public string Github { get; set; }
}

public class Badge
{
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("description")]
    public string Description { get; set; }
    [JsonProperty("created")]
    public string Created { get; set; }
    [JsonProperty("badge")]
    public string BadgeUrl { get; set; }
}</code>
登入後複製

透過遵循這些準則,您可以有效地將具有巢狀集合的 JSON 資料反序列化到 C# POCO 類別中,即使 JSON 結構與簡單列表表示略有不同。 請記得將 "http://coderwall.com/mdeiters.json" 替換為您的實際 JSON 資料來源。 另請注意在巢狀類別中加入 Newtonsoft.Json using 語句和明確屬性宣告。

以上是在 C# 中將 JsonConvert.DeserializeObject 與巢狀集合一起使用時如何解決 JSON 反序列化錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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