¿Hay una manera de hacer que XmlSerializer
para serializar miembros de la clase primitivos (por ejemplo, las propiedades de cuerda) como atributos XML, no como elementos XML, sin tener que escribir [XmlAttribute]
delante de cada declaración de propiedad? Es decir ¿Existe un cambio global que indique XmlSerializer
serializar todos los miembros de la clase primitiva como atributos XML?Cómo hacer que XmlSerializer para generar atributos en lugar de elementos por defecto
Supongamos que tenemos la siguiente clase:
public class Person
{
public string FirstName
{
...
}
public string LastName
{
...
}
}
Entonces XmlSerializer
genera el código por defecto:
<Person>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</Person>
Lo que quiero, sin embargo, es este código:
<Person FirstName="John" LastName="Doe"/>
De nuevo: quiero hacer eso sin [XmlAttribute]
(o sin XmlAttributeOverrides
, que sería aún más trabajo).
Una posible solución sería utilizar un paso genérico de posprocesamiento que aplica una transformación XSLT para convertir elementos en atributos. Pero me pregunto si hay una solución más simple.
La respuesta de Enrico parece ser una solución a la pregunta, pero ciertamente es más complicada y menos deseable que las dos que está evitando. Quizás puedas decirnos por qué no puedes usar esos métodos, para que sepamos qué, específicamente, estás evitando. –
Necesito intercambiar datos con un sytsem externo que requiera un formato XML específico. En ese formato, los tipos de datos simples se representan como atributos, los tipos de datos complejos (por ejemplo, listas) se representan como atributos.El modelo de datos tiene alrededor de 50 clases y 500 atributos. Quiero evitar que tenga que escribir [XmlAttribute] delante de cada atributo. –
@Kyle W En este caso, tener la lógica de serialización XML común en un solo lugar (como una clase base) definitivamente tendría sentido, ya que mantiene las cosas [DRY] (http://en.wikipedia.org/wiki/Don't_repeat_yourself) –