Maison >développement back-end >C++ >Comment résoudre les erreurs JsonConvert.DeserializeObject lors de la désérialisation de JSON en classes POCO C# ?
JsonConvert.DeserializeObject : Désérialiser JSON en classe POCO C#
Lorsqu'il s'agit d'API RESTful, il est souvent nécessaire de désérialiser les réponses JSON en objets C# Plain Old CLR (POCO). Une méthode couramment utilisée est JsonConvert.DeserializeObject.
Question :
Considérez la classe User POCO suivante :
Utilisateur.cs :
<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>
Lorsque vous essayez de désérialiser JSON vers cette classe à l'aide de JsonConvert.DeserializeObject, une exception est levée indiquant que le tableau JSON ne peut pas être désérialisé dans une liste de comptes.
Solution :
Pour résoudre ce problème, il y a deux points clés à considérer :
1. Déclarez la propriété Accounts en tant qu'objet :
Modifiez la déclaration de propriété Accounts pour représenter un objet au lieu d'une liste.
User.cs (mis à jour) :
<code class="language-c#">public class User { // ... [JsonProperty("accounts")] public Account Accounts { get; set; } }</code>
2. Utilisez l'attribut JsonProperty :
Appliquez l'attribut JsonProperty à chaque propriété pour mapper les noms de propriétés JSON aux noms de propriétés C#.
User.cs (en utilisant JsonProperty) :
<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>
Cours supplémentaires (Compte et Badge) :
Définissez des classes supplémentaires pour tous les objets imbriqués tels que les comptes et les badges, et appliquez les propriétés JsonProperty en conséquence.
Compte.cs :
<code class="language-c#">public class Account { [JsonProperty("github")] public string Github { get; set; } }</code>
Badge.cs :
<code class="language-c#">public class Badge { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } // ... }</code>
Exemple d'utilisation :
<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>
Avec ces modifications, JsonConvert.DeserializeObject désérialise désormais avec succès JSON en classe User POCO et gère les objets imbriqués (comptes) de manière appropriée.
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!