2010-03-24 15 views
71

Mi aplicación de escritorio serializa objetos usando XmlSerializer. Me sugirieron aprovechar el DataContractSerializer en su lugar.
¿Bajo qué escenarios debería usar DataContractSerializer?DataContractSerializer vs XmlSerializer: Pros y contras de cada serializador

Muchas gracias

Comentarios.
1. El archivo XML de salida se almacena localmente. Ninguna otra aplicación deserializa los objetos de ese archivo XML.
2. Mi aplicación se ejecuta con .NET Framework 3.5 SP1.

+0

también vemos [DataContract-vs-XMLType] (http://stackoverflow.com/questions/624111/datacontract-vs-xmltype) – nawfal

Respuesta

93

Dan Rigsby tiene la última publicación sobre esto - ¡léelo!

XmlSerializer vs. DataContractSerializer (web archive)

Dice todo lo que hay que decir, y de una manera muy convincente.

En resumen:

XmlSerializer:

  • ha existido por mucho tiempo
  • es "opt-out"; todo lo público se serializado, a menos que se diga que no lo ([XmlIgnore])

DataContractSerializer es:

  • el nuevo chico en la ciudad
  • optimizado para la velocidad (aproximadamente un 10% más rápido que XmlSerializer, por lo general)
  • "opt-in" - cosas sólo se marca específicamente como [DataMember] será serializado
  • pero nada marcado con [DataMember] será serializado - ya sea public o private
  • no admite atributos XML (por razones de velocidad)
+1

Espera, ¿puedes dar más detalles sobre este último punto? –

+2

@ Paul-SebastianManole: el DataContractSerializer no admite atributos XML, por razones de velocidad. ¿Qué hay que elaborar? –

+0

Bueno, soy nuevo en .NET. Estaba a punto de seguir usando XmlSerializer desde que encontré algunos tutoriales en línea. Pero luego encontré DataContractSerializer en MSDN, que parece estar vinculado a WCF. Lo que quiero hacer es deserializar un poco de XML en un objeto simple que me permita acceder a un elemento XML y sus atributos porque quiero serializar esos objetos más tarde, volver a un documento XML, después de calcular algunos valores para los atributos. –

Cuestiones relacionadas