DataContractSerializer vs XmlSerializer: Vor- und Nachteile jedes Serializers

84

Meine Desktop-Anwendung serialisiert Objekte mit XmlSerializer. Mir wurde vorgeschlagen, DataContractSerializerstattdessen zu nutzen .
Unter welchen Szenarien soll ich verwenden DataContractSerializer?

Danke vielmals

Bemerkungen.
1. Die Ausgabe-XML-Datei wird lokal gespeichert. Keine anderen Anwendungen deserialisieren Objekte aus dieser XML-Datei.
2. Meine Anwendung wird mit .NET Framework 3.5 SP1 ausgeführt.

Vitali Climenco
quelle
Siehe auch datacontract-vs-xmltype
nawfal

Antworten:

112

Dan Rigsby hat den ultimativen Beitrag dazu - lesen Sie ihn!

XmlSerializer vs. DataContractSerializer (Webarchiv)

Er sagt alles, was es zu sagen gibt, und das auf sehr überzeugende Weise.

Zusamenfassend:

XmlSerializer:

  • gibt es schon lange
  • ist "Opt-out"; Alles, was öffentlich ist, wird serialisiert, es sei denn, Sie sagen es nicht ([XmlIgnore])

DataContractSerializer ist:

  • das neue Kind in der Stadt
  • auf Geschwindigkeit optimiert (ca. 10% schneller als XmlSerializer, normalerweise)
  • "opt-in" - nur Dinge, die Sie speziell als [DataMember]serialisiert markieren
  • Aber alles, was mit markiert ist, [DataMember]wird serialisiert - ob es ist publicoderprivate
  • unterstützt keine XML-Attribute (aus Geschwindigkeitsgründen)
marc_s
quelle
2
@ Paul-SebastianManole: Der DataContractSerializer unterstützt aus Geschwindigkeitsgründen keine XML-Attribute. Was ist zu erarbeiten?
marc_s
6
@ Paul-SebastianManole: Wenn Ihr Quell-XML Attribute für XML-Elemente (wie <Customer Id="42"> ...) enthält, können Sie nur den XML-Serializer verwenden
marc_s
2
Dies kann aus MSDN hilfreich sein: Die XmlSerializer-Klasse unterstützt eine viel engere Gruppe von Typen als die DataContractSerializer-Klasse, ermöglicht jedoch eine wesentlich bessere Kontrolle über das resultierende XML und unterstützt einen wesentlich größeren Teil des XSD-Standards (XML Schema Definition Language). Es sind auch keine deklarativen Attribute für die serialisierbaren Typen erforderlich ... Die XmlSerializer-Klasse unterstützt keine Datenvertragstypen. MSDN .
Paul-Sebastian Manole
1
@OO: Nicht nur Opt-In in .NET 3.5 SP1 und höher - für mich ist es immer noch die bevorzugte Vorgehensweise . Ermöglicht das
Festlegen von
17
Größte Warnung zum DataContractSerializer - Beim Deserialisieren wird die Reihenfolge der Elemente berücksichtigt und es wird stillschweigend fehlgeschlagen, wenn sie nicht in der richtigen Reihenfolge vorliegen. Imho, wenn Sie nicht an beiden Enden genau die gleichen Baugruppen verwenden, ist dies ungewöhnlich gefährlich.
Pxtl