Maison >développement back-end >C++ >Comment créer un JSONConverter personnalisé dans JSON.net pour gérer la sérialisation polymorphe sans TynEnameHandling?
Considérons un exemple, où vous avez une personne de classe de base et deux employés et artistes dérivés. Vous avez une liste d'objets de personne qui doivent être sérialisés en tant que JSON. Cependant, vous souhaitez éviter d'utiliser TynEnameHandling. C'est là que le JSONConverter personnalisé peut jouer un rôle.
Pour cette raison, nous devons définir un convertisseur personnalisé PersonConverter, qui élargit le JSONCreationverter
. Dans la méthode de création du convertisseur, nous pouvons analyser l'objet JSON pour déterminer le type dérivé correct en fonction de l'existence de champs spécifiques.
<code class="language-c#">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>Maintenant, lorsque le reflux JSON est sérialisé dans l'objet List
, vous pouvez utiliser un convertisseur personnalisé:
<code class="language-c#">string json = "[...]"; List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());</code>N'oubliez pas que lors de l'utilisation d'un convertisseur personnalisé pendant la séquentialisation, l'instance de PersonConverter doit être transmise à jsonconvert.deserializeObject. Cette méthode vous permet de traiter des types de données complexes ou personnalisés en fournissant une logique de conversion spéciale dans un JSONConverrer 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!