Heim >Backend-Entwicklung >C++ >So implementieren Sie einen benutzerdefinierten JsonConverter in JSON.NET für die polymorphe Deserialisierung?
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
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>
<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
.
JObject
Verwenden Sie die Methode, um das Attribut des Objekts zu füllen. Create
JsonSerializer.Populate
Schlussfolgerung
Durch Erreichen von Customkö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!