Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyelesaikan Ralat Penyahserialisasian JSON Apabila Menggunakan JsonConvert.DeserializeObject dengan Koleksi Bersarang dalam C#?

Bagaimana untuk Menyelesaikan Ralat Penyahserialisasian JSON Apabila Menggunakan JsonConvert.DeserializeObject dengan Koleksi Bersarang dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-15 11:55:43715semak imbas

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

Menyahserialisasikan Kelas JSON kepada C# POCO: Menangani Isu Koleksi Bersarang

Menggunakan JsonConvert.DeserializeObject untuk menukar data JSON ke C# Plain Old CLR Objects (POCOs) biasanya mudah. Walau bagaimanapun, cabaran boleh timbul apabila berurusan dengan koleksi bersarang.

Masalah:

Pertimbangkan POCO Pengguna dengan koleksi accounts dan badges bersarang. Percubaan penyahserikatan mungkin mengeluarkan pengecualian, menunjukkan sifat accounts (dijangka sebagai koleksi seperti List<T>) dianggap sebagai objek JSON.

Penyelesaian:

Penyelesaian melibatkan dua aspek utama:

1. Mentakrifkan accounts Harta dengan betul:

Kelas C# POCO mesti mengisytiharkan harta accounts sebagai objek, mencerminkan struktur JSON. Ini biasanya bermakna mencipta kelas Account yang berasingan untuk mewakili data akaun.

2. Memanfaatkan JsonProperty Atribut:

Atribut JsonProperty adalah penting untuk memetakan nama sifat JSON kepada sifat C# yang sepadan. Ini memastikan penyahserikatan yang tepat.

Contoh Ilustrasi:

Contoh ini menunjukkan penyahserikatan JSON yang berjaya ke dalam kelas POCO, mengendalikan koleksi bersarang:

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

Dengan mengikut garis panduan ini, anda boleh menyahsiri data JSON dengan koleksi bersarang dengan berkesan ke dalam kelas C# POCO anda, walaupun apabila struktur JSON berbeza sedikit daripada perwakilan senarai ringkas. Ingat untuk menggantikan "http://coderwall.com/mdeiters.json" dengan sumber data JSON sebenar anda. Perhatikan juga penambahan Newtonsoft.Json menggunakan pernyataan dan pengisytiharan sifat eksplisit dalam kelas bersarang.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Penyahserialisasian JSON Apabila Menggunakan JsonConvert.DeserializeObject dengan Koleksi Bersarang dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn