24 junio, 2007

Serialización Xml

Este formato es basado en XML y es recomendado cuando el objeto será des-serializado en diferentes plataformas o cuando va a ser trasportado por la red siempre y cuando no se requiera serializar miembros privados. Este formato brinda una gran interoperabilidad y es muy fácil de comprender.

'Persona.vb

Public Class Persona

Public Nombre As String

Public Apellido As String

Public Edad As Integer

Public Sub New()

MyBase.New()

End Sub

Public Sub New(ByVal _nombre As String, ByVal _apellido As String, ByVal _edad As String)

Nombre = _nombre

Apellido = _apellido

Edad = _edad

End Sub

End Class

'Serialize.vb

Imports System.IO

Imports System.Runtime.Serialization

Imports System.Xml.Serialization

Module Module1

Sub Main()

Dim Manuel As New Persona("Manuel", "Salas", 30)

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

Dim formateador As New XmlSerializer(GetType(Persona))

formateador.Serialize(archivo, Manuel)

archivo.Close()

End Sub

End Module

Como podemos observar es muy similar a las serializaciones anteriores, básicamente seguimos los mismos tres pasos:

  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:

'Persona.vb

Public Class Persona

Public Nombre As String

Public Apellido As String

Public Edad As Integer

Public Sub New()

MyBase.New()

End Sub

Public Sub New(ByVal _nombre As String, ByVal _apellido As String, ByVal _edad As String)

Nombre = _nombre

Apellido = _apellido

Edad = _edad

End Sub

End Class

'Deserialize.vb

Imports System.IO

Imports System.Runtime.Serialization

Imports System.Xml.Serialization

Module Module1

Sub Main()

Dim Manuel As New Persona

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

Dim formateador As New XmlSerializer(GetType(Persona))

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