VB.NET'te nesnelerin serileştirilmesi birkaç yolla gerçekleştirilebilir: standart .NET serileştiricileri (BinaryFormatter, XmlSerializer, DataContractSerializer, JsonSerializer).
Ne zaman kullanılmalı:
BinaryFormatter — eski, güvenlik nedenleriyle kullanılmaması önerilir.XmlSerializer — harici programlarla veri alışverişi ve ayarların saklanması için kullanışlıdır.DataContractSerializer — karmaşık nesnelerin serileştirilmesi ve WCF ile etkileşim için uygundur.JsonSerializer (System.Text.Json veya Newtonsoft.Json) — modern web API'leri ve diller arası etkileşim için kullanılır.İnce noktalar:
XmlSerializer ile örnek kod:
<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
Serileştirilebilir olmayan türlere sahip özellikler içeren bir nesne serileştirilebilir mi? Ne olacaktır?
Cevap:
Eğer sınıf, serileştirilebilir olarak işaretlenmemiş türe sahip üyeler (özellikler/alanlar) içeriyorsa, serileştirme hata ile sonuçlanır. Örneğin, FileStream türünde bir alan içeren bir nesne, XmlSerializer ile serileştirilemez — bu tür serileştirmeyi desteklemediği için bir istisna ortaya çıkacaktır.
Hikaye
Özel yapıcı nedeniyle serileştirme hatası: Veri taşıma sırasında bir geliştirici yalnızca özel bir yapıcıya sahip bir sınıfı serileştirmeye çalıştı. Sonuç — serileştirme hata ile sonuçlandı ve veri taşıma süreci durduruldu.
Hikaye
Döngüsel bağlantılar: Projede serileştirme için XmlSerializer kullanılıyordu, ancak nesneler arasında döngüsel bağlantılar vardı. Serileştirme StackOverflowException’a ve iş parçacığı hatalarına yol açtı.
Hikaye
Veri kaybı: JsonSerializer ile serileştirilen karmaşık bir nesnede,
[JsonIgnore]ile işaretlenen bir üye yanlışlıkla yapıldığı için, veri gönderimi sırasında kısmı veri kaybına neden oldu ve sonraki serileştirme önemli nesne parametrelerini kaybetti.