Heim > Backend-Entwicklung > C++ > Wie kann ich mit Json.NET sowohl eine Liste als auch abgeleitete Klassenmitglieder serialisieren?

Wie kann ich mit Json.NET sowohl eine Liste als auch abgeleitete Klassenmitglieder serialisieren?

Patricia Arquette
Freigeben: 2025-01-07 13:01:41
Original
851 Leute haben es durchsucht

How Can I Serialize Both a List and Derived Class Members Using Json.NET?

Anpassen der Json.NET-Serialisierung für abgeleitete Listenklassen

Einführung

Beim Erweitern einer Klasse abgeleitet von List kann es schwierig sein, sowohl die Serialisierung der Liste als auch die zusätzlichen Mitglieder in der abgeleiteten Liste zu handhaben Klasse. Standardmäßig behandelt Json.Net IEnumerable-Implementierungen als Arrays und serialisiert beim Deserialisieren nur die Liste.

Ansätze zur Serialisierung von Listen- und abgeleiteten Klassenmitgliedern

Es gibt zwei Hauptansätze Ansätze zur Lösung dieses Problems:

Öffentliches Eigentum Belichtung

Eine Möglichkeit besteht darin, eine öffentliche Eigenschaft in der abgeleiteten Klasse zu erstellen, die die Liste verfügbar macht. Auf diese Weise erkennt Json.Net die Eigenschaft und serialisiert sie und die abgeleiteten Klassenmitglieder. Dieser Ansatz kann jedoch zu unnötiger Komplexität führen, wenn die Liste nur intern zugänglich sein soll.

Benutzerdefinierter JsonConverter

Alternativ kann ein benutzerdefinierter JsonConverter implementiert werden, um den Serialisierungsprozess zu steuern . Dies ermöglicht mehr Flexibilität bei der Definition des gewünschten Serialisierungsverhaltens. Hier ist ein Beispiel für einen Konverter für PagedResult:

public class PagedResultConverter<T> : JsonConverter
{
    // ... Implementation ...
}
Nach dem Login kopieren

Innerhalb des Konverters können Sie die Serialisierung und Deserialisierung der Liste und der abgeleiteten Klassenmitglieder unabhängig steuern.

Verwendung des benutzerdefinierten JsonConverters

Um den benutzerdefinierten Konverter verwenden zu können, muss er in enthalten sein die JsonSerializerSettings:

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new PagedResultConverter<string>());
settings.Formatting = Formatting.Indented;
Nach dem Login kopieren

Beispielausgabe mit benutzerdefiniertem Konverter

Wenn der benutzerdefinierte Konverter vorhanden ist, wird bei der Serialisierung von PagedResult die folgende JSON-Ausgabe generiert:

{
  "PageSize": 10,
  "PageIndex": 0,
  "TotalItems": 3,
  "TotalPages": 1,
  "Items": [
    "foo",
    "bar",
    "baz"
  ]
}
Nach dem Login kopieren

Dieser Ansatz ermöglicht eine bessere Kontrolle über den Serialisierungsprozess und löst das Problem sowohl die Liste als auch die abgeleiteten Klassenmitglieder effektiv zu serialisieren.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Json.NET sowohl eine Liste als auch abgeleitete Klassenmitglieder serialisieren?. 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