2009-04-08 11 views

Respuesta

4

Estoy pensando sobre todo de XmlSerializer aquí:

  • se limita a los datos en forma de árbol; que no puede manejar gráficos de objetos completos
  • se limita a miembros del público, en las clases públicas
  • en realidad no puede hacer mucho con object miembros
  • tiene algunos puntos débiles alrededor de los genéricos
  • como muchos serializadores, no tocará las propiedades de instancia de una colección (mala práctica en el primer lugar)
  • xml simplemente no es siempre una buena opción para grandes volúmenes de datos (no menos importante, para un rendimiento)
  • requiere un constructor sin parámetros pública

DataContractSerializer resuelve algunos de estos, pero tiene sus propias limitaciones:

  • que no puede manejar valores de atributos
  • requiere .NET 3.0 (así no hay mucho uso en 2,0)
+0

El tema miembros del público se puede evitar mediante el uso de DataContractSerializer –

+0

cierto - aclarará ... –

+0

Estos son todos Es bueno saber sobre el marco de serialización Xml en .NET, pero no diría que son escenarios comunes en los que la serialización XML "falla". Por ejemplo, que el serializador Xml serializa solo los miembros públicos de lectura/escritura es un atributo del marco de serialización, no un escenario donde falla. Que requiere que la clase tenga un ctor público sin parámetros tampoco es un "fracaso" per se. – Cheeso

0

TimeSpan objetos no son serializables. IDictionary -los tipos de implementación tampoco son serializables (aunque pueden pueden ser serializados con algún masaje manual).

1

Dependiendo del serializador, las referencias cíclicas pueden no funcionar

0

AFAIK, las clases marcadas como [Obsoletas] no están serializadas por XmlSerializer desde .NET 2.0

1

El uso de la palabra clave sombras también ha roto la serialización y deserialización para mí porque el sombreado provoca una nueva aplicación de esa propiedad de existir por lo que es incompatible para la reconstrucción adecuada. Solo use sobrecargas si desea volver a escribir el específico para una subclase.

+1

Para aquellos que no conocen VB.NET, "' Shadows' "es equivalente a' new' en C#: 'public new int PropertyName {get; set;}' donde la clase base tiene un 'public virtual int PropertyName. ..'. –

Cuestiones relacionadas