Programacin Orientada a Objetos en C# .
NET
CAPTULO 9
SERIALIZACIN
(ALMACENAMIENTO DE OBJETOS EN ARCHIVOS)
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Programacin Orientada a Objetos en C# .NET
Preguntas detonadoras
Qu es y para qu sirve la serializacin?
Se pueden almacenar objetos en un archivo?
Cmo?
Serializacin
Es el proceso para almacenar un
objeto en un dispositivo de
almacenamiento secundario.
Almacenar un objeto en un archivo
en el disco duro, memoria USB, CD,
etc.
4
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Programacin Orientada a Objetos en C# .NET
Para qu sirve la serializacin?
Para transformar los datos y poder
transferirlos por un canal de
comunicacin (internet, archivo,
memoria, etc.)
Para compartir informacin de un
sistema en otra aplicacin.
5
Tipos de serializacin en el
Framework .NET
Binario
Tipos de
serializacin
SOAP
XML
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Programacin Orientada a Objetos en C# .NET
Cmo preparar una clase para
serializar sus objetos?
Durante la serializacin, los atributos,
nombre de la clase y su ensamblado se
convierten en una secuencia de bytes.
Para serializar un objeto, su clase debe
declararse como [Serializable]
Ejemplo en UML
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Programacin Orientada a Objetos en C# .NET
Ejemplo codificado en C#
[Serializable]
class Empleado
{
// Atributos privados
// Propiedades pblicas
}
9
Espacios de nombres requeridos
using System.IO; // Para el uso
de archivos
using
System.Runtime.Serialization.For
matters.Binary; // Para el uso
de la serializacin
10
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Programacin Orientada a Objetos en C# .NET
Crear un archivo
Para grabar datos en un archivo, primero debe
crearse mediante:
// Declaracin del flujo del
archivo
private System.IO.FileStream flujo;
// Creacin del archivo
flujo = new FileStream(NombreArchivo,
FileMode.Create);
11
Serializar el archivo creado
Declaracin
del
serializar el archivo
formateador
para
System.Runtime.Serialization.Formatters.Binary.Bina
ryFormatter seriador;
seriador = new BinaryFormatter();
12
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Programacin Orientada a Objetos en C# .NET
Cmo grabar un objeto en el
archivo serializado?
Almacena miObjeto
controlado por flujo
en
el
archivo
seriador.Serialize(flujo, miObjeto);
13
Cerrar el archivo
Una vez usado el archivo, entonces debe
cerrarse mediante:
if (flujo != null)
flujo.Close();
14
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Programacin Orientada a Objetos en C# .NET
Abrir un archivo en modo lectura
Para leer datos de un archivo, primero debe
abrirse mediante:
// Declaracin del flujo del
archivo
private System.IO.FileStream flujo;
// Apertura del archivo
flujo = new FileStream(NombreArchivo,
FileMode.Open);
15
Serializar el archivo abierto en modo
lectura
Declaracin
del
serializar el archivo
formateador
para
System.Runtime.Serialization.Formatters.Binary.Bina
ryFormatter seriador;
seriador = new BinaryFormatter();
16
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Programacin Orientada a Objetos en C# .NET
Cmo leer un objeto del archivo
serializado?
A este proceso se le conoce como
deserializacin.
Lee miObjeto del archivo controlado por
flujo
miObjeto =
seriador.Deserialize(flujo);
17
Prototipar al leer un objeto
Al leer datos del archivo, debe indicarse el
tipo de dato
A este proceso se le conoce como
prototipar
miEmpleado = (Empleado)
seriador.Deserialize(flujo);
18
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Programacin Orientada a Objetos en C# .NET
Modos de apertura de archivos
(FileMode)
FileMode
Uso
CreateNew
Crea un nuevo archivo. Si el archivo existe dispara una
IOException
Truncate
Abrir un archivo existente. Una vez abierto, el archivo
ser truncado a cero bytes de longitud.
Create
Crea un nuevo archivo. Si el archivo existe ser
sobreescrito.
Open
Abrir un archivo existente. Si no existe dispara una
FileNotFoundException.
OpenOrCreate Abrir un archivo existente, si no existe, lo crea.
Append
Abrir un archivo para agregar datos al final en caso de
existir; de lo contrario crea un archivo nuevo.
19
Modos de acceso de archivos
(FileAccess)
FileAccess
Read
ReadWrite
Write
Uso
Acceso al archivo en modo de solo lectura
Acceso al archivo en modo de lectura y
escritura
Acceso al archivo en modo de solo escritura
20
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
10
Programacin Orientada a Objetos en C# .NET
Cmo detectar si existe un
archivo?
if (File.Exists(NombreArchivo))
{
21
Diseo de una clase para el
manejo de un archivo serializable
22
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
11
Programacin Orientada a Objetos en C# .NET
Desplazamiento del apuntador
interno en un archivo secuencial
Cuando se lee un registro completo, el
apuntador interno del archivo se
posiciona al inicio del siguiente registro.
Por lo tanto, debe ponerse especial
atencin a la posicin del apuntador
interno antes de realizar una operacin
en el archivo.
23
Ejemplo: Modificar el primer
registro
Al leer el primer
registro,
automticamente
se posiciona en el
segundo registro
Modificar los datos
de Pepe por los
de Pancho
24
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
12
Programacin Orientada a Objetos en C# .NET
Error comn al modificar un
registro
Si no se reposiciona
el
apuntador
interno,
entonces
ocurre un error
Permanecen
los
datos de Pepe
Se empalman los
datos de Pancho
en el registro de
Bruno
25
NOTA IMPORTANTE
Se debe reposicionar el apuntador interno del
archivo antes de escribir un registro modificado
26
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
13
Programacin Orientada a Objetos en C# .NET
Cmo reposicionar el apuntador
interno del archivo?
public void ModificarObjeto(Tipo miObjeto)
{
// Reposiciona el apuntador del archivo al
// inicio del registro
flujo.Seek(PosicionAnterior, SeekOrigin.Begin);
// Graba el objeto
this.GrabarObjeto(miObjeto);
}
27
Cmo detector la posicin del
apuntador interno del archivo?
// Mtodo para leer un objeto del archivo
public Tipo LeerObjeto()
{
// Almacena la posicin actual del archivo
PosicionAnterior = flujo.Position;
// Lee el objeto del archivo
Tipo miObjeto = (Tipo) (seriador.Deserialize(flujo));
return(miObjeto);
}
28
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
14
Programacin Orientada a Objetos en C# .NET
Otros ttulos del autor
http://www.itnuevolaredo.edu.mx/Takeyas/Libro
takeyas@itnuevolaredo.edu.mx
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Bruno Lpez Takeyas
15