DataContractSerializer vs XmlSerializer: Her serileştiricinin artıları ve eksileri


86

Masaüstü uygulamam kullanarak nesneleri seri hale getirir XmlSerializer. Bunun DataContractSerializeryerine yararlanmam önerildi .
Hangi senaryolarda kullanmalıyım DataContractSerializer?

Çok teşekkürler

Yorumlar.
1. Çıktı XML dosyası yerel olarak saklanır. Başka hiçbir uygulama bu XML dosyasındaki nesneleri seriyi kaldırmaz.
2. Uygulamam .NET Framework 3.5 SP1 ile çalışıyor.


Yanıtlar:


114

Dan Rigsby'nin bu konudaki nihai gönderisi var - gidin okuyun!

XmlSerializer ve DataContractSerializer (web arşivi)

Söylenecek her şeyi ve çok ikna edici bir şekilde söylüyor.

Kısacası:

XmlSerializer:

  • uzun zamandır buralarda
  • "vazgeçme" dir; siz söylemediğiniz sürece herkese açık olan her şey seri hale getirilir ([XmlIgnore])

DataContractSerializer:

  • Kasabadaki yeni çocuk
  • hız için optimize edilmiştir (tipik olarak XmlSerializer'dan yaklaşık% 10 daha hızlı)
  • "dahil olma" - yalnızca özellikle [DataMember]serileştirilecek olarak işaretlediğiniz öğeler
  • ancak işaretli şey [DataMember]tefrika edilecek - bu olsun publicveyaprivate
  • XML niteliklerini desteklemez (hız nedeniyle)

2
@ Paul-SebastianManole: DataContractSerializer, hız nedeniyle XML özniteliklerini desteklemiyor. Detaylandırmak için ne var?
marc_s

6
Paul-SebastianManole @: Kaynak XML (gibi XML bileşenleri üzerinde özelliklerini içeriyorsa <Customer Id="42"> ...o zaman sen tek seçenek XML seri hale kullanıyor)
Marc_s

2
Bu, MSDN'den alınan faydalı olabilir: XmlSerializer sınıfı, DataContractSerializer sınıfından çok daha dar bir tür kümesini destekler, ancak ortaya çıkan XML üzerinde çok daha fazla denetime izin verir ve XML Şema tanımlama dili (XSD) standardının çok daha fazlasını destekler. Ayrıca serileştirilebilir türlerde herhangi bir bildirim niteliği gerektirmez ... XmlSerializer sınıfı, veri sözleşmesi türlerini desteklemez. MSDN .
Paul-Sebastian Manole

1
@OO: .NET 3.5 SP1 ve daha yeni sürümlerde yalnızca dahil olmak değil, benim için hala bir şeyler yapmanın tercih edilen yolu bu. Aksi takdirde ayarlanamayacak özellikleri ayarlamanıza izin verir (serileştirme sırası, ad alanları ve çok daha fazlası gibi!)
marc_s

17
DataContractSerializer hakkında en büyük uyarı - seriyi kaldırırken, öğelerin sırasını önemsiyor ve doğru sırada değillerse sessizce başarısız oluyor. Imho, her iki uçta da aynı montajları kullanmadığınız sürece, bu onu kullanılamaz bir şekilde tehlikeli hale getirir.
Pxtl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.