lunes, 1 de abril de 2013

Serialización XML de objetos en .net con C#

De acuerdo a wikipedia tenemos que la serialización:

"(En un contexto de almacenamiento de datos y comunicación) La serialización es el proceso de transformar el estado de una estructura de datos u objeto en un formato que pueda ser almacenado (por ejemplo en un archivo o transmitido a través de una red de datos) y restaurado posteriormente ya sea en otro o en el mismo entorno. La serie de bits resultantes pueden usarse para crear un objeto que es clon idéntico del original."

En resumen podríamos tener que la serialización y deserealización es el proceso por el cual se convierte un objeto en una secuencia linear de bytes y que pueden ser almacenados o transmitidos para posteriormente convertir esa secuencia de bytes en un objeto copia del original que almacena incluso su estado interno.

Es por eso que podríamos decir que si queremos almacenar un objeto en un archivo tenemos que almacenar lo que tengamos como resultado de la serialización.

El proceso de serialización es también conocido como deflating o marshall y el proceso contrario como inflating o  también se conoce como unmarshall.

Nuestro ejemplo de serialización consistirá de una clase "Automovil" que tendrá los siguientes atributos:
-Marca
-Modelo
-Año de fabricación
-Dirección hidráulica
-Automático
-Placas
-Numero de Cilindros
-Numero de puertas
-Color

Uno de los requisitos necesarios para poder serializar un objeto es que debemos marcarlo con el atributo [Serializable]

















También hemos creado dos enumeraciones que nos permitirán ver el comportamiento de nuestra clase al serializarla con elementos externos.

Contamos con un formulario que nos permitirá ingresar los datos del vehículo a partir de los cuales crearemos nuestro objeto a serializar.
Al presionar el botón Serializa!!! primeramente crearemos nuestro objeto a serializar (ese paso lo omitiré ya que no es el objetivo del post).

Una vez que tenemos nuestro Objeto listo, necesitamos un objeto del tipo XmlSerializer y un stream que almacenará el resultado (en éste ejemplo hemos usado un objeto MemoryStream).


Y vemos nuestro ejemplo funcionando: