Maison > développement back-end > C++ > Comment créer un JSONConverter personnalisé dans JSON.net pour gérer la sérialisation polymorphe sans TynEnameHandling?

Comment créer un JSONConverter personnalisé dans JSON.net pour gérer la sérialisation polymorphe sans TynEnameHandling?

Susan Sarandon
Libérer: 2025-02-02 08:51:11
original
370 Les gens l'ont consulté

How to Create a Custom JsonConverter in JSON.NET to Handle Polymorphic Serialization without TypeNameHandling?

Implémentez JSONConverrter personnalisé

dans json.net

JSONConverter personnalisé est utilisé pour étendre les fonctions de sérialisation et de dépendance JSON.NET. Dans certains cas, les convertisseurs personnalisés doivent être créés pour traiter les types de données complexes ou personnalisés.

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>
Copier après la connexion
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>
Copier après la connexion
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!

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