Heim > Backend-Entwicklung > C++ > Wie erstelle ich einen benutzerdefinierten JsonConverter in json.net, um die polymorphe Serialisierung ohne TypenameHandling zu bewältigen?

Wie erstelle ich einen benutzerdefinierten JsonConverter in json.net, um die polymorphe Serialisierung ohne TypenameHandling zu bewältigen?

Susan Sarandon
Freigeben: 2025-02-02 08:51:11
Original
370 Leute haben es durchsucht

How to Create a Custom JsonConverter in JSON.NET to Handle Polymorphic Serialization without TypeNameHandling?

implementieren Sie angepasstes JsonConverrter

in json.net

benutzerdefinierte JSONCONVERTER wird verwendet, um JSON.NET -Serialisierungs- und Abhängigkeitsfunktionen zu erweitern. In einigen Fällen müssen benutzerdefinierte Konverter erstellt werden, um komplexe oder angepasste Datentypen zu verarbeiten.

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>
Nach dem Login kopieren
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>
Nach dem Login kopieren
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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage