Maison >développement back-end >C++ >Comment implémenter un JSONConverter personnalisé dans json.net pour la désérialisation polymorphe?

Comment implémenter un JSONConverter personnalisé dans json.net pour la désérialisation polymorphe?

Susan Sarandon
Susan Sarandonoriginal
2025-02-02 08:36:11925parcourir

How to Implement a Custom JsonConverter in JSON.NET for Polymorphic Deserialization?

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 PersonConverter Implément JsonCreationConverter<Person> JsonCreationConverter<T>

Redjson Method Rewriting

Dans notre personnalité
<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.

    Utilisez la méthode pour remplir l'attribut de l'objet.
  1. JObject Retour à l'objet nouvellement créé.
  2. Create Utilisez le convertisseur
  3. JsonSerializer.Populate Pour utiliser un convertisseur personnalisé, vous pouvez utiliser le code suivant:
  4. Conclusion

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!

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