Maison >développement back-end >C++ >Comment puis-je sérialiser et désérialiser des objets enfants polymorphes dans JSON.NET sans champ « $type » ?

Comment puis-je sérialiser et désérialiser des objets enfants polymorphes dans JSON.NET sans champ « $type » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-24 13:07:08667parcourir

How Can I Serialize and Deserialize Polymorphic Child Objects in JSON.NET Without a

Types de données avec sous-objets polymorphes avec JSON.NET SÉRIALISATION ET DETERTIATION

json.net permet la sérialisation et la dérivé entre la classe JSON et C #, mais peut se compliquer lors du traitement des objets polymorphes.

Utilisez le champ $ type

La méthode par défaut consiste à utiliser

pour ajouter un champ TypeNameHandling.Auto à JSON pour indiquer le type de sous-objet. Cependant, cela introduira un champ inutile. $type

Méthode de traitement sous-type alternative

Afin d'éviter le champ , une méthode alternative consiste à créer une classe de base pour les objets polymorphes et à ajouter un attribut

pour indiquer le sous-type. Cependant, cela nécessite que la classe de conteneurs inclut des instances de sous-objet afin d'accéder à l'attribut $type pendant la sérialisation. Type Type Les attributs de type sous-type dans la classe de base

Une méthode plus stable consiste à ajouter des informations sous-type comme attributs à la classe de base. Cela se fait en utilisant la personnalité .

Convertisseur sous-type personnalisé JsonConverter Le convertisseur personnalisé Type utilise la méthode

pour vérifier la propriété "Type" dans JSON et les objets sérialisés en conséquence. Il définit également une méthode pour spécifier le type qu'il peut gérer.

Implémentation du code

La mise en œuvre du prototype suivant explique cette méthode: ReadJson CanConvert

Grâce à cette méthode de remplacement, les informations sous-type sont intégrées dans JSON elle-même, sans champs séparés

, et fournit une solution flexible pour les objets polymère sérialisés.

Cette sortie révolue évite la phrassion inutile comme "L'approche par défaut est ..." tout en conservant la signification et la structure d'origine. > Section avec l'activité Icitation du convertisseur personnalisé.

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