W VB.NET serializację obiektów można zrealizować na kilka sposobów: standardowe serializatory .NET (BinaryFormatter, XmlSerializer, DataContractSerializer, JsonSerializer).
Kiedy używać:
BinaryFormatter — przestarzały, niezalecany ze względów bezpieczeństwa.XmlSerializer — wygodny do wymiany danych z zewnętrznymi programami i do przechowywania ustawień.DataContractSerializer — odpowiedni do serializacji złożonych obiektów i interakcji z WCF.JsonSerializer (System.Text.Json lub Newtonsoft.Json) — do nowoczesnych API internetowych i międzyjęzykowej interakcji.Szczegóły:
Przykład kodu z 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
Czy można serializować obiekt, który zawiera właściwości z typami, które nie są oznaczone jako serializowalne? Co się stanie?
Odpowiedź:
Jeśli klasa zawiera człony (właściwości/pola), których typ nie jest oznaczony jako serializowalny, serializacja zakończy się błędem. Na przykład, obiekt z polem typu FileStream nie może być zserializowany przy użyciu XmlSerializer — pojawi się wyjątek, ponieważ ten typ nie obsługuje serializacji.
Historia
Błąd serializacji z powodu prywatnego konstruktora: Przy migracji danych programista próbował zserializować klasę z jedynym prywatnym konstruktorem. Efekt — serializacja zakończyła się błędem, proces migracji został przerwany.
Historia
Odniesienia cykliczne: W projekcie do serializacji użyto XmlSerializer, ale pomiędzy obiektami istniały odniesienia cykliczne. Serializacja prowadziła do StackOverflowException i nieobsługiwanych awarii usług.
Historia
Przypadkowa utrata danych: W złożonym obiekcie serializowanym przez JsonSerializer człon oznaczony został
[JsonIgnore]przypadkowo, co prowadziło do utraty części danych podczas przesyłania, a dalsza deserializacja traciła ważne parametry obiektu.