XmlSerializer: hubo un error al reflejar el tipo
Usando C# .NET 2.0, tengo una clase de datos compuestos que tiene el [Serializable]
atributo. Estoy creando una XMLSerializer
clase y pasándola al constructor:
XmlSerializer serializer = new XmlSerializer(typeof(DataClass));
Recibo una excepción que dice:
Hubo un error al reflejar el tipo.
Dentro de la clase de datos hay otro objeto compuesto. ¿Es necesario que esto también tenga el [Serializable]
atributo, o al tenerlo en el objeto superior, lo aplica de forma recursiva a todos los objetos internos?
Mire la excepción interna que está obteniendo. Le dirá qué campo/propiedad tiene problemas para serializar.
Puede excluir campos/propiedades de la serialización xml decorándolos con el [XmlIgnore]
atributo.
XmlSerializer
no usa el [Serializable]
atributo, así que dudo que ese sea el problema.
Recuerde que las clases serializadas deben tener constructores predeterminados (es decir, sin parámetros). Si no tienes ningún constructor, está bien; pero si tiene un constructor con un parámetro, también deberá agregar el predeterminado.
Tuve un problema similar y resultó que el serializador no podía distinguir entre 2 clases que tenía con el mismo nombre (una era una subclase de la otra). La excepción interna se veía así:
'Tipos BaseNamespace.Class1' y 'BaseNamespace.SubNamespace.Class1' usan el nombre de tipo XML, 'Clase1', del espacio de nombres ''. Utilice atributos XML para especificar un nombre XML y/o espacio de nombres exclusivo para el tipo.
Donde BaseNamespace.SubNamespace.Class1 es una subclase de BaseNamespace.Class1.
Lo que tenía que hacer era agregar un atributo a una de las clases (lo agregué a la clase base):
[XmlType("BaseNamespace.Class1")]
Nota: Si tiene más capas de clases, también deberá agregarles un atributo.
Razones más comunes por mi parte:
- the object being serialized has no parameterless constructor
- the object contains Dictionary
- the object has some public Interface members