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!