RSS

Serializar y deserializar en .NET con C#

05 Jul

Muchas veces surge la necesidad de almacenar objetos en ficheros, en memoria, como cadena de caracteres, en una base de datos, etc. Para ello .NET nos facilita la vida, primero debemos marcar la clase como Serializable y posteriormente proceder a realizar la serialización.

Veremos un ejemplo sencillo:

Serializar un objeto en memoria:

Primero definimos un array de bytes con una longitud estimada (superior a la que va a tener el objeto en cuestión).

byte[] flujosBytes = new byte[LONGITUD];

A continuación se especifica el formato de la serialización y una nueva instancia de la clase donde lo vamos a serializar (en memoria) pasando por parámetro el array que acabamos de crear.

IFormatter formatter = new BinaryFormatter();

Stream stream = new MemoryStream(flujosBytes, true);

Se ejecuta el método Serialize con el flujo y el objeto a serializar (recordad que debe estar marcado como serializable)  y finalmente se cierra el flujo.

formatter.Serialize(stream, objeto);

stream.Close();

Ya tenemos el objeto en forma de array de bytes,  a partir de aquí guardarlo en un fichero por ejemplo, es trivial:

Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);

stream.Write(flujo, 0,flujo.Length);

stream.Close();

Bien,  ya tenemos el objeto serializado y almacenado en un fichero, pero, ¿cómo desserializamos? Pues muy sencillo:

Primero -y siguiendo con el ejemplo- se debe rescatar el flujo de bytes del fichero que acabamos de crear:

Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

byte[] flujo = new byte[LONGITUD];

stream.Read(flujo, 0, flujo.Length);

stream.Close();

Volvemos a tener el flujo del principio, ahora procedemos a convertir el flujo de bytes al objeto inicial:

IFormatter formatter = new BinaryFormatter();

Stream stream = new MemoryStream(flujo, true);

object objectD = (object)formatter.Deserialize(stream);

stream.Close();

 
Deja un comentario

Publicado por en julio 5, 2011 en Programación

 

Etiquetas: , ,

Deja un comentario