Heim >Backend-Entwicklung >C++ >So implementieren Sie einen benutzerdefinierten JsonConverter in JSON.NET für die polymorphe Deserialisierung?

So implementieren Sie einen benutzerdefinierten JsonConverter in JSON.NET für die polymorphe Deserialisierung?

Susan Sarandon
Susan SarandonOriginal
2025-02-02 08:36:11927Durchsuche

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

json.net passt JsonConverter an die Verarbeitung der polymorphen Derivatisation

an

Wenn der Typ mit polymorphen Typen in json.net zu tun hat, kann der JSON -Backbone -Objekt, wenn der Typ in JSON nicht klar definiert ist, eine Herausforderung. Dieser Leitfaden zeigt, wie ein benutzerdefiniertes JSONCONVERRER erreicht wird, um dieses Hindernis zu überwinden.

Herausforderung

Betrachten Sie die folgenden JSON -Daten:

<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>
Die Aufgabe besteht darin, diese JSON -Daten an

zurückzugeben, wobei List<Person> die Basisklasse ist und Person und Employee abgeleitete Klassen sind. Artist

Lösung

Um mit dieser Situation umzugehen, erstellen wir eine benutzerdefinierte

-Klasse namens

, die PersonConverter erbt. JsonConverter Klasse ist ein benutzerdefinierter Konverter, der verwendet wird, wenn der Typ der Werte, die die Werte der Rückseite -Sequentialisierung aus den JSON -Daten schließen, schließen. JsonCreationConverter<Person> JsonCreationConverter<T> PersonConverter implementieren

Readjson -Methode umschreiben

<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>

In unserem benutzerdefinierten wird die -Methode umgeschrieben, um die folgenden Schritte auszuführen:

PersonConverter Lesen Sie JSON -Daten in ReadJson.

    rufen Sie die Methode auf, um den Typ entsprechend dem JSON -Attribut zu bestimmen.
  1. JObject Verwenden Sie die Methode, um das Attribut des Objekts zu füllen.
  2. Zurück zum neu erstellten Objekt. Create
  3. Verwenden Sie den Konverter JsonSerializer.Populate
  4. Um einen benutzerdefinierten Konverter zu verwenden, können Sie den folgenden Code verwenden:

Schlussfolgerung

Durch Erreichen von Custom

können Sie polymorphe Derivate in json.net verarbeiten. Der in diesem Handbuch bereitgestellte zeigt, wie JSON -Daten analysiert und den entsprechenden abgeleiteten Typ ermittelt werden. Diese Methode kann während des tieferen Tiefens flexibel mit dem Polymorphismus umgehen.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie einen benutzerdefinierten JsonConverter in JSON.NET für die polymorphe Deserialisierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn