Heim >Backend-Entwicklung >C++ >Wie erstelle ich einen benutzerdefinierten JsonConverter in json.net, um die polymorphe Serialisierung ohne TypenameHandling zu bewältigen?
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>Wenn der JSON -Backflow nun auf das List
-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>Denken Sie daran, dass bei der Verwendung eines benutzerdefinierten Konverters während der Sequentialisierung die Instanz des Personconverters an JSONConvert übergeben werden muss. Mit dieser Methode können Sie komplexe oder angepasste Datentypen verarbeiten, indem Sie eine spezielle Conversion -Logik in einem benutzerdefinierten JSONConverrer bereitstellen.
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!