Utilisez JsonConvert.DeserializeObject pour analyser JSON en classe POCO C#
Lorsque vous rencontrez des erreurs (telles que l'exception "Impossible de désérialiser...") lors de la désérialisation de JSON vers une classe POCO C#, il est crucial de comprendre les exigences d'une désérialisation réussie.
Plus précisément, la méthode JsonConvert.DeserializeObject
nécessite que le JSON soit conforme à la structure attendue et au type de données définis dans la classe POCO.
Résolution des erreurs
La clé pour résoudre cette erreur réside dans deux aspects :
Déclarer correctement les propriétés de la liste :
Assurez-vous que la réponse JSON contient un tableau d'objets pour les propriétés déclarées comme List<T>
dans la classe POCO. Par exemple :
{ "username": "username", // ... 其他属性 "accounts": [ { "github": "github-username" }, // ... 其他帐户 ] }
Dans une classe POCO, l'attribut Accounts
doit être déclaré comme :
[JsonProperty("accounts")] public List<Account> Accounts { get; set; }
Utiliser l'attribut JsonProperty :
Les attributs JsonProperty
mappent les noms d'attributs JSON aux attributs de classe POCO correspondants. Par défaut, les noms de propriétés JSON sont sensibles à la casse et correspondent aux noms de propriétés C#. Pour personnaliser ce mappage, utilisez l'attribut JsonProperty
:
[JsonProperty("github")] public string GithubUsername { get; set; }
Exemple
Voici un exemple corrigé :
public class User { [JsonProperty("username")] public string Username { get; set; } // ... 其他属性 [JsonProperty("accounts")] public List<Account> Accounts { get; set; } } public class Account { [JsonProperty("github")] public string GithubUsername { get; set; } } // 反序列化代码 var json = @"{ 'username': 'jdoe', // ... 其他属性 'accounts': [{ 'github': 'jdoe-github' }] }"; var user = JsonConvert.DeserializeObject<User>(json);
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!