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# ?

Comment résoudre les erreurs de désérialisation JSON lors de l'utilisation de JsonConvert.DeserializeObject avec des collections imbriquées en C# ?

Mary-Kate Olsen
Libérer: 2025-01-15 11:55:43
original
720 Les gens l'ont consulté

How to Resolve JSON Deserialization Errors When Using JsonConvert.DeserializeObject with Nested Collections in 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>
Copier après la connexion

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!

source:php.cn
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