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
Patricia Arquetteoriginal
2025-01-07 13:01:41880parcourir

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 ...
}

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;

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"
  ]
}

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!

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