Heim >Backend-Entwicklung >C++ >Wie kann man polymorphe JSON -Daten mit einem benutzerdefinierten JSON.NET -Konverter deserialisieren?
Verwenden eines benutzerdefinierten JSON.NET -Konverters Back -sequentialisierte polymorphe JSON -Daten
benutzerdefinierte json.net Converter bietet einen leistungsstarken Mechanismus zum Anpassen der Serialisierung und des Rücks -Sequentialisierungsprozesses. Es ermöglicht Entwicklern, die Funktion von JSON.NET zu erweitern, um kompliziertere Datentypen oder Szenarien zu verarbeiten.
Wenn eine solche Szene beim Umgang mit Polymorphismus erscheint, sind verschiedene Arten der Vererbung der Vererbung. Betrachten Sie das folgende Beispiel:
<code class="language-csharp">public class Person { public string FirstName { get; set; } public string LastName { get; set; } } public class Employee : Person { public string Department { get; set; } public string JobTitle { get; set; } } public class Artist : Person { public string Skill { get; set; } }</code>Angenommen, wir haben ein Beispiel für Mitarbeiter und Künstler.
<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>Wie sequenzieren wir diesen JSON in
und identifizieren die spezifische Art von allen richtig? List<Person>
Standard bietet keine Methode basierend auf JSON -Inhalten, um den richtigen Typ zu bestimmen. Wir können jedoch die -Methode umschreiben und eine neue Zusammenfassung
einführen (diese Methode akzeptiert ein), um unseren eigenen benutzerdefinierten Konverter zu erstellen: CustomCreationConverter
ReadJson
Create
In unserer spezifischen Szene haben wir eine Erweiterung JObject
<code class="language-csharp">public abstract class JsonCreationConverter<T> : JsonConverter { protected abstract T Create(Type objectType, JObject jObject); public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jObject = JObject.Load(reader); T target = Create(objectType, jObject); serializer.Populate(jObject.CreateReader(), target); return target; } }</code>erstellt
JsonCreationConverter<Person>
Mit diesem benutzerdefinierten Konverter können wir die JSON -Zeichenfolge vertiefen: PersonConverter
<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>analysiert den JSON -Inhalt, um den richtigen Typ jeder Person zu bestimmen und eine Instanz von
,
oder<code class="language-csharp">string json = "[...]"; // 此处应替换为实际的JSON字符串 List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());</code>entsprechend zu erstellen. Dies ermöglicht nahtlos die polymorphe Datenstruktur.
PersonConverter
Employee
Das obige ist der detaillierte Inhalt vonWie kann man polymorphe JSON -Daten mit einem benutzerdefinierten JSON.NET -Konverter deserialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!