DNM+ Online
dotnetmania 2.0
Serialización de XML
La serialización de XML consiste en pasar de un esquema XML a una clase y a la inversa, pudiendo así gestionar los datos XML como si fueran un objeto, simplificando así el tratamiento de XML complejos.

Antes de adentrarnos en la serialización de XML con .NET, para los que no conozcan el concepto de serialización, explicaré algunos conceptos básicos. La serialización consiste en pasar una instancia de un objeto a datos que pueden ser guardados en un medio de almacenamiento, como por ejemplo un fichero. Así también, existe la operación opuesta conocida como deserialización, que consiste en crear una instancia de un objeto a partir de unos datos. Centrándonos en el tema que nos interesa, la serialización de XML consiste en convertir una instancia de un objeto en un XML, y la deserialización consiste en convertir un XML en una instancia de un objeto. Quizá usted se está preguntando para qué puede servir esto, pues bien, la serialización se utiliza por ejemplo para guardar el estado de sesión en una página web o para copiar objetos al portapapeles de Windows. En el caso concreto de la serialización de XML, podemos utilizarlo además como una forma para simplificar la gestión de nuestros XML más complejos. Aunque todos estos conceptos parecen muy abstractos, una vez que nos ponemos manos a la obra son bastante sencillos, así que no daremos más rodeos. Esquema XSD Para empezar crearemos un esquema XSD, que es una definición genérica que sirve para determinar la estructura que debe tener un XML válido para ese esquema XSD, aunque la sintaxis para crear un XSD no es sencilla podemos utilizar cualquier aplicación de las muchas disponibles en el mercado para generar XML, como por ejemplo XMLSPY. La creación de un XSD queda fuera del alcance de este artículo, pero realizar un esquema XSD, con XMLSPY por ejemplo, resulta una labor muy sencilla, pudiendo incluso generarlo automáticamente a partir de cualquier XML que tengamos. Por eso debemos asegurarnos que los XML que vamos a tratar son válidos para el esquema XSD; si algún XML de los que vamos a serializar no es válido para el esquema XSD no se podrá realizar la serialización. Creación automática de la clase Una vez que ya tenemos nuestro esquema XSD tan sólo tenemos que ejecutar una instrucción en la línea de comandos de Visual Studio .NET, obteniendo una clase para poder serializar nuestro XML. La instrucción a ejecutar es la siguiente:

xsd.exe   -c   -l:c#   -n:miclase   miEsquema.xsd

XSD es una herramienta del SDK de .NET Framework, al que le pasamos como parámetros el nombre de la clase que vamos a generar y el nombre del fichero XSD que contiene el esquema XML. También podemos observar que podemos determinar el lenguaje en el que deseamos que nos genere la clase, que en este ejemplo es C#. Si vemos el código generado en la clase comprobaremos que se ha generado una clase por cada nodo del XML y los elementos de cada nodo están representados por propiedades de la clase. Además podemos comprobar que existen atributos de metadatos personalizados junto a algunas declaraciones de la clase, como por ejemplo el campo producto tiene el siguiente atributo de metadatos [System.Xml.Serialization.XmlElementAttribute("producto")], que sirve para que el serializador genere un array de elementos de tipo producto. Serialización y deserialización Ya tenemos creada nuestra clase a partir del esquema XSD, ahora sólo nos queda leer el fichero XML que deseamos deserializar y podemos comprobar lo sencillo que resulta trabajar con los datos de nuestro XML una vez que están deserializados en un objeto. Para realizar los procesos de serialización y deserialización utilizaremos la clase XmlSerializer de .NET tal y como se indica en el siguiente código de ejemplo en C#. Ver fuente 4. A partir de ahora ya tenemos nuestro objeto factura, en el cual están todos los datos referentes al XML deserializado, accediendo a las propiedades de este objeto podemos leer todos los nodos de nuestro XML. Por ejemplo, si queremos leer el nodo fecha tan sólo tendremos que poner en nuestro código:

miFactura.fecha

O si queremos acceder al elemento nombreproducto de nuestro segundo nodo de productos tendremos que poner en nuestro código:

miFactura.producto[1].nombreproducto

Como hemos podido comprobar acceder ahora un XML resulta muy sencillo, y la cantidad de código a escribir para leer cualquier XML se reduce notablemente. Pero la serialización no sólo nos ofrece ventajas para leer XML, también nos ofrece muchas ventajas a la hora de escribir un XML. Como ya explicamos con anterioridad, para escribir un XML en un fichero realizaremos una serialización de una instancia de nuestro objeto. Veamos un ejemplo en C# en el fuente 5. En el código del fuente 4 podemos comprobar cómo vamos escribiendo las propiedades de nuestro objeto, y posteriormente rellenamos el array de productos. Pues bien, estas propiedades que estamos escribiendo serán posteriormente los elementos de nuestro XML y cada posición del array de productos se convertirá en un nodo de nuestro XML. Para serializar nuestro objeto y pasarlo a un fichero XML tan sólo debemos utilizar de nuevo la clase serializer de .NET. Así hemos conseguido de forma sencilla y con una clara orientación a objetos escribir un fichero XML. Conclusión En resumen, hemos podido comprobar como la serialización, además de podernos ser útil para guardar el estado de sesión en una página Web o para copiar objetos al portapapeles de Windows, es también muy útil para tratar con XML. La serialización de XML nos ahorra escribir código y nos simplifica la lectura y escritura de los mismos.

blog comments powered by Disqus
autor
referencias