Maison > développement back-end > C++ > Comment réussir à désérialiser JSON dans une classe POCO C# à l'aide de JsonConvert.DeserializeObject ?

Comment réussir à désérialiser JSON dans une classe POCO C# à l'aide de JsonConvert.DeserializeObject ?

Barbara Streisand
Libérer: 2025-01-15 11:42:43
original
542 Les gens l'ont consulté

How to Successfully Deserialize JSON into a C# POCO Class Using JsonConvert.DeserializeObject?

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 :

  1. 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" },
         // ... 其他帐户
       ]
     }
    Copier après la connexion

    Dans une classe POCO, l'attribut Accounts doit être déclaré comme :

     [JsonProperty("accounts")]
     public List<Account> Accounts { get; set; }
    Copier après la connexion
  2. 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; }
    Copier après la connexion

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);
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal