domingo, 12 de agosto de 2007

Serialización normal y XML en .NET

Tengan un buen día, señoritas y señores. Aquí les traigo un artículo acerca de la serialización utilizando C#, para variar un poco y dejar descansar a AJAXito y PHPcito por un pequeñisimo instante. La serialización, es un proceso en el cual se guarda el estado de un objeto, es decir, una instancia de una clase, para guardar ese estado en un archivo con el propósito de poder utilizarlo después haciendo el proceso inverso el cual es llamado deserialización. Pero, explicado de manera más mundana, voy a plantear un ejemplo:

Digamos que en un proyecto hemos creado la clase Perro. La clase perro tiene las propiedades siguientes:

public string raza;
public int edad;
public string nombre;

Entonces, digamos que tenemos una aplicación en la cual el usuario especifica los datos de su perro, y para ello, en el código, la lógica es que creamos una instancia de la clase perro para guardar en ella los datos del perro del usuario, de la siguiente manera:

Perro canino = new Perro();
canino.raza = "ChowChow";
canino.edad = "3";
canino.nombre = "Dixo";

Y luego? si deseamos que, a partir de aquí, cada vez que el usuario abra la aplicación, se utilizen los datos que el ingresó de su perro la primera vez, ¿qué podemos hacer?

a)Guardar los datos en una base de datos y crear código para cargar dichos datos cada vez que el usuario abra la aplicación, lo que implicaría que la aplicación estaría atada a una base de datos y tendría que abrirse uan conexión solo para extraer esos datos.

b)Usar serialización para guardar la instancia de la clase Perro y y deserializando el objeto cuando se abra la aplicación.

La segunda opción es la más factible, pero, ¿como es la lógica?

1º Tenemos el objeto o instancia de la clase que deseamos serializar, en nuestro ejemplo, la instancia nombrada canino, que ya contiene datos para la raza, edad y nombre.

2º Creamos un objeto lector de archivos, de los cuales hay varios, como el StreamReader, el FileStream, etc. para poder ya sea abrir un archivo existente, de cualquier extensión, o crear un nuevo archivo, con el objetivo de guardar ahi la información serializada.

3º Creamos un objeto formateador, del cual hay varios tipos, pero el que utilizo es el formateador binario (BinaryFormatter) el cual va a serializar o deserializar el objeto deseado y dichos datos los va a guardar en un archivo de texto utilizando el objeto lector de archivos.

4º Se serializa/deserializa el archivo y LISTO!!

Serializar datos es una gran alternativa cuando se desea almacenar informacion pequeña que se utiliza a menudo, sin amarrar a la aplicacion a una base de datos.

La serialización/deserialización XML es parecida, obviamente es cuando se guarda el objeto serializado en un archivo XML, en este tipo de serialización se pueden trabajar el modo de serializar los datos, como por ejemplo si queremos que alguna propiedad del objeto sea guardada como un elemento o como un atributo de un elemento, ya que, si no especificamos nada para serializar un objeto en un archivo XML, la estructura de dicho XML es la siguiente:



Para entenderlo mejor, supongamos que serializamos el objeto de la clase Perro el cual está así:

Perro canino = new Perro();
canino.raza = "ChowChow";
canino.edad = "3";
canino.nombre = "Dixo";

Basandonos en la información, el documento XML quedaría de la siguiente manera:



Pero, nosotros podemos hacer varias cosas en el codigo de la clase, como por ejemplo si queremos determinar que una propiedad no sea serializada, se le antepone a la declaración de dicha propiedad lo siguiente:
[NonSerialized()] //Para no ser serializada de forma normal (binaria)
public int propiedad;

[XmlIgnore()] //Para no ser serializada de forma XML
public int propiead;

O si se desea que una propiedad sea un atributo de un elemento, se especifica cual será su nombre como atributo de la siguiente manera:
[XmlAttribute(AttributeName="nombre")]
public int propiedad;

Tambien una especificación más, y es que para que una propiedad sea serializable, esta debe ser pública o tener algun modificador de acceso, de lo contrario no se serializará.

Luego de toda esta teoría que puede parecerles aburrida pero necesaria de entender, les dejo un vínculo para descargar una aplicación en la cual se llevan a cabo la serialización/deserialización binaria y XML, que se encuentra bien documentada (ya que tengo el mal hábito de no documentar los codigos que escribo XD ) y no necesitarán más que haber leido esta teoría y la documentación para poder entender el código, pero si por si acaso tienen alguna duda pueden hacermela saber mediante los comentarios al artículo o pueden mandarme un correo a
osk-r_orlando@hotmail.com

Pueden descargar la aplicación
>>AQUI<<

Espero que les haya servido, tengan un buen día y sigan revisando el blog para proximos artículos acerca de C# o PHP, AJAX, MySQL, etc.

No hay comentarios: