Maison > développement back-end > C++ > Comment puis-je sérialiser à la fois une liste et des membres de classe dérivés à l'aide de Json.NET ?

Comment puis-je sérialiser à la fois une liste et des membres de classe dérivés à l'aide de Json.NET ?

Patricia Arquette
Libérer: 2025-01-07 13:01:41
original
855 Les gens l'ont consulté

How Can I Serialize Both a List and Derived Class Members Using Json.NET?

Personnalisation de la sérialisation Json.NET pour les classes de listes dérivées

Introduction

Lors de l'extension d'une classe dérivé de List, il peut être difficile de gérer à la fois la sérialisation de la liste et les membres supplémentaires dans le fichier dérivé. classe. Par défaut, Json.Net traite les implémentations d'IEnumerable comme des tableaux et sérialise uniquement la liste lors de la désérialisation.

Approches de sérialisation de la liste et des membres de classe dérivés

Il existe deux principaux approches pour résoudre ce problème :

Propriété publique Exposition

Une option consiste à créer une propriété publique dans la classe dérivée qui expose la liste. Ce faisant, Json.Net reconnaîtra la propriété et la sérialisera ainsi que les membres de la classe dérivée. Cependant, cette approche peut introduire une complexité inutile si la liste ne doit être accessible qu'en interne.

JsonConverter personnalisé

Alternativement, un JsonConverter personnalisé peut être implémenté pour contrôler le processus de sérialisation. . Cela permet plus de flexibilité dans la définition du comportement de sérialisation souhaité. Voici un exemple de convertisseur pour PagedResult :

public class PagedResultConverter<T> : JsonConverter
{
    // ... Implementation ...
}
Copier après la connexion

Dans le convertisseur, vous pouvez contrôler indépendamment la sérialisation et la désérialisation de la liste et des membres de la classe dérivée.

Utilisation de Custom JsonConverter

Pour utiliser le convertisseur personnalisé, il doit être inclus dans les JsonSerializerSettings :

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new PagedResultConverter<string>());
settings.Formatting = Formatting.Indented;
Copier après la connexion

Exemple de sortie utilisant un convertisseur personnalisé

Avec le convertisseur personnalisé en place, la sortie JSON suivante sera générée lors de la sérialisation de PagedResult :

{
  "PageSize": 10,
  "PageIndex": 0,
  "TotalItems": 3,
  "TotalPages": 1,
  "Items": [
    "foo",
    "bar",
    "baz"
  ]
}
Copier après la connexion

Cette approche permet un meilleur contrôle sur le processus de sérialisation et résout le problème de sérialiser efficacement à la fois la liste et les membres de la classe dérivée.

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