Maison >développement back-end >C++ >Comment implémenter un JSONConverter personnalisé dans json.net pour la désérialisation polymorphe?
JSON.net personnalise JSONConverter pour traiter la dérivé polymorphe
Lorsque vous traitez avec des types polymorphes dans JSON.net, lorsque le type n'est pas clairement défini dans JSON, l'objet JSON Data Back-Sequentialization, le type de squelette peut être difficile. Ce guide montre comment atteindre JSONConverrer personnalisé pour surmonter cet obstacle.
Challenge
Considérez les données JSON suivantes:
La tâche consiste à renvoyer ces données JSON à
, où<code class="language-json">[ { "Department": "Department1", "JobTitle": "JobTitle1", "FirstName": "FirstName1", "LastName": "LastName1" }, { "Department": "Department2", "JobTitle": "JobTitle2", "FirstName": "FirstName2", "LastName": "LastName2" }, { "Skill": "Painter", "FirstName": "FirstName3", "LastName": "LastName3" } ]</code>est la classe de base, et
et List<Person>
sont des classes dérivées. Person
Employee
Solution Artist
Afin de gérer cette situation, nous créerons une classe personnalisée appelée , qui hérite
. La classe est un convertisseur personnalisé utilisé lorsque le type des valeurs qui déduisent les valeurs de la séquentialisation arrière à partir des données JSON. PersonConverter
JsonConverter
JsonCreationConverter<Person>
JsonCreationConverter<T>
<code class="language-csharp">public class PersonConverter : JsonCreationConverter<Person> { protected override Person Create(Type objectType, JObject jObject) { if (FieldExists("Skill", jObject)) { return new Artist(); } else if (FieldExists("Department", jObject)) { return new Employee(); } else { return new Person(); } } private bool FieldExists(string fieldName, JObject jObject) { return jObject[fieldName] != null; } }</code>, la méthode
est réécrite pour effectuer les étapes suivantes:
Lisez les données JSON dans. PersonConverter
ReadJson
Appelez la méthode pour déterminer le type en fonction de l'attribut JSON.
JObject
Retour à l'objet nouvellement créé. Create
Utilisez le convertisseur JsonSerializer.Populate
Pour utiliser un convertisseur personnalisé, vous pouvez utiliser le code suivant: En réalisant la personnalité , vous pouvez gérer les dérivés polymorphes dans json.net. Le fourni dans ce guide montre comment analyser les données JSON et déterminer le type dérivé approprié. Cette méthode peut gérer de manière flexible le polymorphisme pendant la profondeur.
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!