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