Heim > Backend-Entwicklung > C++ > Wie serialisiere und deserialisiere ich abgeleitete Typen in C# mit Json.net?

Wie serialisiere und deserialisiere ich abgeleitete Typen in C# mit Json.net?

Mary-Kate Olsen
Freigeben: 2025-01-21 18:41:08
Original
658 Leute haben es durchsucht

How to Serialize and Deserialize Derived Types in C# with Json.net?

Abgeleitete Typen mit Json.net serialisieren und deserialisieren

Json.net (Newtonsoft) erfordert eine spezielle Behandlung, um abgeleitete Typen ordnungsgemäß zu serialisieren und zu deserialisieren, wenn polymorphe Vererbung in C# verwendet wird. In diesem Artikel wird erläutert, wie Sie dies erreichen, indem Sie die Typnamenverarbeitung aktivieren.

Frage

Bedenken Sie die folgende Klassenhierarchie:

<code class="language-csharp">public class Base
{
    public string Name;
}
public class Derived : Base
{
    public string Something;
}</code>
Nach dem Login kopieren

Wenn Sie nun versuchen, eine JSON-Zeichenfolge zu deserialisieren, die eine Liste von Basisobjekten enthält, diese aber tatsächlich abgeleitete Objekte enthält, können Sie die abgeleiteten Typinformationen nicht wiederherstellen. Wie kann dieses Problem gelöst werden?

Antwort

Json.net bietet die Option TypeNameHandling, die die Serialisierung und Deserialisierung von Typnamen ermöglicht. Um diese Funktion zu nutzen:

  1. Erstellen Sie ein JsonSerializerSettings-Objekt und setzen Sie TypeNameHandling auf TypeNameHandling.All.
  2. Übergeben Sie dieses Einstellungsobjekt als Parameter an die Methoden SerializeObject und DeserializeObject.

Hier ist ein Beispiel:

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

Dieser Ansatz stellt sicher, dass Json.net Typinformationen während der Serialisierung beibehält und sie während der Deserialisierung wiederherstellt, sodass abgeleitete Typen korrekt wiederhergestellt werden können.

Das obige ist der detaillierte Inhalt vonWie serialisiere und deserialisiere ich abgeleitete Typen in C# mit Json.net?. 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