Maison > développement back-end > C++ > Comment sérialiser les classes de listes dérivées dans Json.Net ?

Comment sérialiser les classes de listes dérivées dans Json.Net ?

Barbara Streisand
Libérer: 2025-01-07 12:56:40
original
431 Les gens l'ont consulté

How to Serialize Derived List Classes in Json.Net?

Comprendre le défi de la sérialisation des classes de listes dérivées dans Json.Net

Lorsque vous travaillez avec une classe dérivée de List, telle que un PagedResult classe, vous pouvez rencontrer des problèmes avec la sérialisation Json.Net. Par défaut, Json.Net traite les classes implémentant IEnumerable comme des tableaux. Cependant, marquer la classe dérivée avec les attributs [JsonObject] et [JsonProperty] ne sérialise que les membres de la classe dérivée, à l'exclusion de la liste elle-même.

Surmonter le dilemme : deux approches

Pour résoudre ce problème, vous avez deux options :

Option 1 : exposer la liste en tant que Propriété publique

Vous pouvez créer une propriété publique dans votre classe dérivée pour exposer la liste. Par exemple, dans PagedResult, vous pouvez ajouter une propriété publique List Articles { obtenir ; ensemble; }. Cela permet à la fois aux membres de la classe dérivée et à la liste d'être sérialisés.

Option 2 : utiliser un JsonConverter personnalisé

Vous pouvez également écrire un JsonConverter personnalisé pour gérer la sérialisation comme vous le souhaitez. Voici un exemple de convertisseur pour PagedResult :

class PagedResultConverter<T> : JsonConverter
{
    // Override methods for writing and reading JSON
    // For brevity, only the `WriteJson` method is shown here
    
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        PagedResult<T> result = (PagedResult<T>)value;
        // Create a JSON object to represent the PagedResult
        // Add both derived class members and list items to the object
        // Write the object to the writer
    }
}
Copier après la connexion

Dans ce convertisseur, nous avons un contrôle total sur le processus de sérialisation, garantissant que les membres de la classe dérivée et la liste sont inclus dans la sortie JSON.

Démo et conclusion

Voici une démo illustrant la personnalisation convertisseur en action :

// Assume a `PagedResult<string>` class definition
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new PagedResultConverter<string>());
string json = JsonConvert.SerializeObject(result, settings);
Copier après la connexion

En utilisant l'une ou l'autre approche, vous pouvez sérialiser efficacement à la fois les membres de la classe dérivée et la liste, répondant ainsi à vos exigences de sérialisation dans Json.Net.

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