Maison >développement back-end >C++ >Comment résoudre les erreurs de désérialisation JSON lors de l'utilisation de JsonConvert.DeserializeObject avec des collections imbriquées en C# ?
Désérialiser JSON en classes POCO C# : résoudre les problèmes de collection imbriquée
Utiliser JsonConvert.DeserializeObject
pour convertir des données JSON en objets C# Plain Old CLR (POCO) est généralement simple. Cependant, des défis peuvent survenir lorsqu'il s'agit de collections imbriquées.
Problème :
Considérez un POCO utilisateur avec des collections accounts
et badges
imbriquées. Toute tentative de désérialisation peut générer une exception, indiquant que la propriété accounts
(attendue comme une collection comme List<T>
) est traitée comme un objet JSON.
Solution :
La solution implique deux aspects clés :
1. Définir correctement la propriété accounts
:
La classe C# POCO doit déclarer la propriété accounts
en tant qu'objet, reflétant la structure JSON. Cela signifie généralement créer une Account
classe distincte pour représenter les données du compte.
2. Tirer parti de l'attribut JsonProperty
:
L'attribut JsonProperty
est crucial pour mapper les noms de propriétés JSON aux propriétés C# correspondantes. Cela garantit une désérialisation précise.
Exemple illustratif :
Cet exemple démontre une désérialisation JSON réussie dans une classe POCO, gérant des collections imbriquées :
<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>
En suivant ces directives, vous pouvez désérialiser efficacement les données JSON avec des collections imbriquées dans vos classes POCO C#, même lorsque la structure JSON diffère légèrement d'une simple représentation de liste. N'oubliez pas de remplacer "http://coderwall.com/mdeiters.json"
par votre source de données JSON réelle. Notez également l'ajout de l'instruction Newtonsoft.Json
using et de la déclaration de propriété explicite dans les classes imbriquées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!