In VB.NET kann die Serialisierung von Objekten auf mehrere Arten durchgeführt werden: durch die standardmäßigen .NET-Serialisierer (BinaryFormatter, XmlSerializer, DataContractSerializer, JsonSerializer).
Wann verwenden:
BinaryFormatter — ist veraltet, sollte aus Sicherheitsgründen nicht verwendet werden.XmlSerializer — ist praktisch für den Datenaustausch mit externen Programmen und zur Speicherung von Einstellungen.DataContractSerializer — geeignet für die Serialisierung komplexer Objekte und die Interaktion mit WCF.JsonSerializer (System.Text.Json oder Newtonsoft.Json) — für moderne Web-APIs und die zwischensprachliche Interaktion.Details:
Beispielcode mit XmlSerializer:
<Serializable()> Public Class Person Public Property Name As String Public Property Age As Integer End Class Dim p As New Person With {.Name = "Ivan", .Age = 30} Dim serializer As New Xml.Serialization.XmlSerializer(GetType(Person)) Using stream As New IO.FileStream("person.xml", IO.FileMode.Create) serializer.Serialize(stream, p) End Using
Kann man ein Objekt serialisieren, das Eigenschaften mit nicht als serialisierbar markierten Typen enthält? Was passiert?
Antwort:
Wenn die Klasse Mitglieder (Eigenschaften/Felder) enthält, deren Typ nicht als serialisierbar markiert ist, schlägt die Serialisierung mit einem Fehler fehl. Zum Beispiel ist es nicht möglich, ein Objekt mit einem Feld vom Typ FileStream über XmlSerializer zu serialisieren – es tritt eine Ausnahme auf, da dieser Typ keine Serialisierung unterstützt.
Geschichte
Serialisierungsfehler aufgrund eines privaten Konstruktors: Bei der Migration von Daten versuchte der Entwickler, eine Klasse mit einem einzigen privaten Konstruktor zu serialisieren. Das Ergebnis — die Serialisierung schlug mit einem Fehler fehl und der Migrationsprozess wurde unterbrochen.
Geschichte
Zirkuläre Verweise: Im Projekt wurde für die Serialisierung der XmlSerializer verwendet, aber es gab zirkuläre Verweise zwischen den Objekten. Die Serialisierung führte zu StackOverflowException und nicht behandelten Ausnahmefehlern in den Diensten.
Geschichte
Zufälliger Datenverlust: In einem komplexen Objekt, das über JsonSerializer serialisiert wurde, wurde das Mitglied versehentlich mit
[JsonIgnore]markiert, was zu einem Verlust von Teilen der Daten beim Versand führte, und die anschließende Deserialisierung verlor wichtige Parameter des Objekts.