Heim > Backend-Entwicklung > C++ > Wie kann ich abgeleitete Typen in JSON.NET deserialisieren und gleichzeitig die Typinformationen beibehalten?

Wie kann ich abgeleitete Typen in JSON.NET deserialisieren und gleichzeitig die Typinformationen beibehalten?

Mary-Kate Olsen
Freigeben: 2025-01-21 18:46:14
Original
723 Leute haben es durchsucht

How Can I Deserialize Derived Types in JSON.NET While Preserving Type Information?

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

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

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!

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