Jugando con la información de los XML´s ---> xsd.exe (Parte 2)
En el post anterior comentamos cómo deserializar un fichero XML para obtener una serie de instancias de unas clases que lo representan.
Ahora vamos a realizar lo contrario, a partir de una instancia de la clase Libro, vamos a generar un XML asociado que se ajusta al esquema.
Nos creamos un objeto de la clase libro y le añadimos la información del libro a través de las propiedades de la clase que se proporcionan. A continuación con creamos un fichero con la clase FileStream y posteriormente con la clase XmlSerializer serializamos el objeto de la clase Libro que nos hemos creado anteriormente.
static void Main(string[] args)
{
Libro milibro = new Libro();
milibro.precio = (double)30;
milibro.precioSpecified = true;
milibro.Titulo = "Los tres cerditos";
milibro.Autores = new string[] {"Luis","Manolo","Laura" };
milibro.Editorial = "MiEditorial";
FileStream fs = new FileStream("prueba.xml", FileMode.Create);
XmlSerializer xs = new XmlSerializer(typeof(Libro));
xs.Serialize(fs, milibro);
fs.Close();
}
Nota: Si nos fijamos en la clase Libro que se ha generado podemos ver como para el atributo precio hay un atributo en la clase que representa al mismo y otro de tipo boleano asociado. Esto se debe a que para los elementos que pueden o no aparecer (minOccurs=0) o para el caso de los atributos, que nunca son obligatorios, debemos indicar si queremos que se serialicen o no. Para ello en este caso indicamos que precioSpecified=true.
El resultado del ejemplo anterior seria el siguiente documento XML:
<?xml version="1.0"?>
<Libro xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" precio="30">
<Titulo>Los tres cerditos</Titulo>
<Autores>Luis</Autores>
<Autores>Manolo</Autores>
<Autores>Laura</Autores>
<Editorial>MiEditorial</Editorial>
</Libro>
Y esto ha sido todo para serializar y deserializar objetos en ficheros XML.