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!