implementieren Sie angepasstes JsonConverrter
Betrachten wir ein Beispiel, in dem Sie eine Basisklassenperson und zwei abgeleitete Mitarbeiter und Künstler haben. Sie haben eine Liste von Personenobjekten, die als JSON serialisiert werden müssen. Sie möchten jedoch nicht die Verwendung von TypenameHandling verwenden. Hier kann der benutzerdefinierte JsonConverter eine Rolle spielen.
Aus diesem Grund müssen wir einen benutzerdefinierten Konverter -Personconverter definieren, der den JSONCREATIONVERTER
erweitert. In der Methode erstellen des Konverters können wir das JSON -Objekt analysieren, um den korrekten Ableitungstyp gemäß der Existenz bestimmter Felder zu bestimmen.
<code class="language-c#">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>
-Objekt zurückgeführt wird, können Sie einen benutzerdefinierten Konverter verwenden:
<code class="language-c#">string json = "[...]"; List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());</code>
Das obige ist der detaillierte Inhalt vonWie erstelle ich einen benutzerdefinierten JsonConverter in json.net, um die polymorphe Serialisierung ohne TypenameHandling zu bewältigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!