14 junio, 2007

Serialización Binaria

La serialización binaria es muy eficiente, pero recomendado cuando el objeto serializado va a ser des-serializados solo en aplicaciones dot.net. Serialicemos un objeto en un archivo para su posterior recuperación:

Imports System.IO

Imports System.Runtime.Serialization

Imports System.Runtime.Serialization.Formatters

Module Module1

<System.Serializable()> Public Class Persona

Public Nombre As String

Public Apellido As String

Public Edad As Integer

End Class

Sub Main()

Dim Manuel As New Persona()

Manuel.Apellido = "Salas"

Manuel.Nombre = "Manuel"

Manuel.Edad = 30

Dim archivo As New FileStream("c:\temp\f_persona.dat", FileMode.Create)

Dim formateador As New Binary.BinaryFormatter

formateador.Serialize(archivo, Manuel)

archivo.Close()

End Sub

End Module

Como podemos observar básicamente son tres pasos los que debemos realizar para serializar un objeto:

  1. Instanciamos un FileStream para almacenar el objeto serializado.
  2. Instanciamos un Formateador para serializar el objeto.
  3. Serializamos el objeto llamando al método serialize del formateador.

Para des-serializar un objeto seguimos los mismos pasos de manera inversa:

  1. Instanciamos un FileStream para leer el objeto serializado.
  2. Instanciamos un Formateador para des-serializar el objeto.
  3. Des-serializamos el objeto llamando al método deserialize del formateador.

Veamos como des-serializar el objeto que serializamos en el fragmento de código anterior:

Imports System.IO

Imports System.Runtime.Serialization

Imports System.Runtime.Serialization.Formatters

Module Module1

<System.Serializable()> Public Class Persona

Public Nombre As String

Public Apellido As String

Public Edad As Integer

End Class

Sub Main()

Dim Manuel As New Persona()

Dim archivo As New FileStream("c:\temp\f_persona.dat", FileMode.Open)

Dim formateador As New Binary.BinaryFormatter

Manuel = formateador.Deserialize(archivo)

archivo.Close()

Console.WriteLine("Nombre ={0}, Apellido = {1}, Edad = {2}", Manuel.Nombre, Manuel.Apellido, Manuel.Edad)

Console.ReadKey()

End Sub

End Module

Como podemos observar en el ejemplo anterior, cuando creamos una clase personalizada y queremos serializarla debemos marcarla con el atributo <System.Serializable()>. También podemos seleccionar las propiedades que no queremos serializar, para esto utilizamos el atributo <System.NonSerialized()> antes del nombre de la propiedad que deseamos no serializar.

No hay comentarios.: