230 votos

XmlSerializer - No fue un error que refleja el tipo de

El uso de C# .NET 2.0, he compuesto de la clase de datos que tiene la [Serializable] de atributo. Estoy creando un XMLSerializer de la clase y que pasa que en el constructor:

XmlSerializer serializer = new XmlSerializer(typeof(DataClass));

Me estoy haciendo una excepción diciendo:

No fue un error que refleja tipo.

Dentro de la clase de datos que hay otro objeto compuesto. ¿Este también necesita tener el [Serializable] de atributo, o por tener en la parte superior del objeto, lo hace de forma recursiva se aplican a todos los objetos que hay dentro?

305voto

Lamar Puntos 3981

Buscar en el interior excepción de que usted está recibiendo. Le dirá que el campo de la propiedad, que está teniendo problemas para serializar.

Puede excluir campos y propiedades de la serialización xml mediante la decoración con la [XmlIgnore()] atributo.

No creo que XmlSerializer utiliza el atributo [Serializable], por lo que dudo que ese es el problema.

81voto

Jeremy McGee Puntos 13826

Recuerde que serializa las clases deben tener por defecto (es decir. sin parámetros) de constructores. Si usted no tiene ningún constructor en todos, eso está bien; pero si usted tiene un constructor con un parámetro, deberá agregar el valor predeterminado.

15voto

Dennis Calla Puntos 221

He tenido un problema similar, y resultó que el serializador no podía distinguir entre 2 clases que he tenido con el mismo nombre (uno era una subclase de la otra). El interior de la excepción se veía así:

'Tipos de BaseNamespace.Class1' y 'BaseNamespace.SubNamespace.Class1' utilizan el tipo XML nombre, 'Class1', desde el espacio de nombres ". Uso de atributos XML para especificar un único nombre XML y/o espacio de nombres para el tipo.

Donde BaseNamespace.SubNamespace.Class1 es una subclase de BaseNamespace.Class1.

Lo que tenía que hacer era añadir un atributo a una de las clases (he añadido a la base de la clase):

[XmlType("BaseNamespace.Class1")]

Nota: Si usted tiene más capas de las clases que necesita para añadir un atributo a ellos también.

7voto

Rob Cooper Puntos 15945

También ser conscientes de que XmlSerializer no se puede serializar propiedades abstractas.. Ver mi pregunta aquí (que he añadido la solución de código)..

La Serialización XML y Heredado los Tipos

5voto

Gulzar Nazim Puntos 35342

Todos los objetos de la serialización gráfico tiene que ser serializable.

Desde XMLSerializer es una caja negra, visite estos enlaces si desea depurar aún más en el proceso de serialización..

Cambiar la ubicación en la clase XmlSerializer Salidas Temporales de Asambleas

CÓMO: Depurar en un .NET XmlSerializer Ensamblado Generado

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: