Abgeleitete Typen mit Json.net deserialisieren
Angenommen, Sie haben eine Basisklasse Base
und eine abgeleitete Klasse Derived
, wobei Derived
von Base
erbt. Sie haben eine Liste von Base
-Objekten, die Instanzen von Base
und Derived
enthält. Wenn Sie die JSON-Darstellung dieser Liste deserialisieren, möchten Sie den abgeleiteten Typ als seinen tatsächlichen Typ abrufen, nicht nur als Base
-Objekt.
Um dies zu erreichen, bietet Json.net eine Funktion namens Typnamenverarbeitung. Indem Sie diese Funktion aktivieren und als Einstellungsparameter an die Serialisierungs- und Deserialisierungsvorgänge übergeben, können Sie den Objekttyp angeben, der im serialisierten JSON enthalten sein soll.
<code class="language-csharp">Base object1 = new Base() { Name = "Object1" }; Derived object2 = new Derived() { Something = "Some other thing" }; List<Base> inheritanceList = new List<Base>() { object1, object2 }; JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; string Serialized = JsonConvert.SerializeObject(inheritanceList, settings); List<Base> deserializedList = JsonConvert.DeserializeObject<List<Base>>(Serialized, settings);</code>
deserialisiert wurde, enthält deserializedList
Base
- und Derived
-Objekte des richtigen Typs. Das Aktivieren der Typnamenverarbeitung hat jedoch einen Nachteil: Es werden die Namen aller Objekte und Listen in das serialisierte JSON einbezogen, was in manchen Fällen möglicherweise nicht ideal ist.
Das obige ist der detaillierte Inhalt vonWie kann ich mit Json.net eine Liste von Basis- und abgeleiteten Typen deserialisieren und ihre tatsächlichen Typen beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!