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:
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; } }
[ { "Department": "Department1", "JobTitle": "JobTitle1", "FirstName": "FirstName1", "LastName": "LastName1" }, { "Department": "Department2", "JobTitle": "JobTitle2", "FirstName": "FirstName2", "LastName": "LastName2" }, { "Skill": "Painter", "FirstName": "FirstName3", "LastName": "LastName3" } ]
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
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; } }
JsonCreationConverter<Person>
Mit diesem benutzerdefinierten Konverter können wir die JSON -Zeichenfolge vertiefen: PersonConverter
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; } }
,
oderstring json = "[...]"; // 此处应替换为实际的JSON字符串 List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());
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!