Von Json.net abgeleitete Deserialisierung des Typs
Bei der Verarbeitung von JSON-Daten kann es von Vorteil sein, Objekte zu serialisieren und zu deserialisieren, die einer von der Basis abgeleiteten Klassenbeziehung folgen. Json.net (Newtonsoft) erfordert jedoch eine spezielle Konfiguration, um abgeleitete Typen effizient verarbeiten zu können.
Frage:
Berücksichtigen Sie die folgenden Basis- und abgeleiteten Klassen:
<code>public class Base { public string Name; } public class Derived : Base { public string Something; }</code>
Wenn Sie versuchen, eine JSON-Zeichenfolge, die Basisobjekte und abgeleitete Klassenobjekte enthält, in List<Base>
zu deserialisieren, erhalten Sie nur das Basisklassenobjekt und gehen somit die Informationen zum abgeleiteten Typ verloren.
Lösung:
Um abgeleitete Typen erfolgreich zu deserialisieren, müssen Sie die Verarbeitung von Typnamen aktivieren. Dies kann erreicht werden, indem ein JsonSerializerSettings
-Objekt erstellt und die TypeNameHandling
-Eigenschaft auf All
gesetzt wird. Übergeben Sie dieses Einstellungsobjekt an Serialisierungs- und Deserialisierungsvorgänge:
<code>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>
Durch die Aktivierung der Typnamenverarbeitung fügt Json.net Typinformationen in die JSON-Zeichenfolge ein. Während der Deserialisierung werden diese Informationen verwendet, um das abgeleitete Objekt korrekt neu zu erstellen und deserializedList
aufzufüllen.
Hinweis: Mit dieser Methode werden die Namen aller Objekte sowie die Liste selbst in den serialisierten Daten verfügbar gemacht. Wenn dies ein Problem darstellt, ziehen Sie alternative Möglichkeiten zum Umgang mit polymorphen Beziehungen in Betracht.
Das obige ist der detaillierte Inhalt vonWie kann ich abgeleitete Typen in JSON.NET deserialisieren und gleichzeitig die Typinformationen beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!