Maison > développement back-end > C++ > Comment sérialiser les objets enfants polymorphes dans json.net sans le champ '$ type'?

Comment sérialiser les objets enfants polymorphes dans json.net sans le champ '$ type'?

Barbara Streisand
Libérer: 2025-01-24 12:57:14
original
734 Les gens l'ont consulté

How to Serialize Polymorphic Child Objects in Json.Net without the

JSON.net Sous-objet polymorphe de sérialisation, pas de champ "$ type"

Dans le scénario de sérialisation à l'aide de JSON.net pour la sérialisation des objets, une demande commune est d'indiquer des objets polymères dans la classe parent. Bien que les paramètres TypeNameHandling.Auto de JSON.net simplifient cette tâche, il introduira un champ "$ type" pour indiquer le type de sous-objet. Pour diverses raisons, cela peut ne pas être souhaitable.

Challenge

Le défi est de savoir comment identifier le type de sous-objet sans s'appuyer sur le champ "$ type". Une méthode consiste à stocker les informations de type comme indicateur de la classe parent, comme indiqué dans l'exemple fourni. Cependant, cela apportera des restrictions liées à l'accessoire et à la gestion des données.

Solution

Afin de résoudre ces restrictions, une solution plus efficace consiste à ajouter directement les informations sous-type comme l'attribut à la classe de base. Cela permet un énumération sous-type sérialisée lors de la sérialisation d'être attribuée à la classe de base. Au cours de la période de profondeur, vous pouvez utiliser un converteur JSON personnalisé pour charger des données JSON dans des objets temporaires, déterminer les sous-classes appropriées en fonction de l'attribut "Type" et effectuer le compteur -sérialisation en conséquence. Implémentez les détails

La réalisation de la création d'une énumération de sous-type personnalisée et d'un dictionnaire qui mappe le type au sous-type. La classe de base de sous-typesbase contient un attribut de type, qui utilise un dictionnaire pour revenir au sous-type.

Sous-TypeclasssConverter La classe agit comme le JSONConverter responsable du dérivé. Il vérifie la propriété "Type" dans l'objet JSON, obtient le sous-type correspondant et remplit la sous-classe correspondante des instances existantes ou nouvelles.

En adoptant cette méthode, vous pouvez utiliser la sérialisation JSON.net et les sous-objets polymorphes dérivés sans introduire le champ "$ type" pour assurer la flexibilité et la contrôlabilité de la représentation des donné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