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
Barbara Streisandoriginal
2025-01-15 11:42:43479parcourir

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 :

    <code class="language-json"> {
       "username": "username",
       // ... 其他属性
       "accounts": [
         { "github": "github-username" },
         // ... 其他帐户
       ]
     }</code>

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

    <code class="language-csharp"> [JsonProperty("accounts")]
     public List<Account> Accounts { get; set; }</code>
  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 :

    <code class="language-csharp"> [JsonProperty("github")]
     public string GithubUsername { get; set; }</code>

Exemple

Voici un exemple corrigé :

<code class="language-csharp">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);</code>

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:
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