Crear un documento XML desde un objeto (serializaci�n)
[Guardar Estado de los controles de una Windows Forms como Documento XML] 

Fecha: 03/Nov/2004 (03/11/2004)
Autor: Eric Enrique Escobar [email protected]

 


Introducci�n: 

El prop�sito de este articulo es mostrar un mecanismo sencillo que permita guardar los valores contenidos en los controles de una forma de Windows (Como informaci�n de configuraci�n  contactos) en una archivo xml.

Para lograr este prop�sito utilizaremos la clase XmlSerializer que permite crear una representaci�n XML de un objeto para efectos de almacenamiento y transporte, Por ejemplo, ASP.Net utiliza la clase XmlSerializer para codificar mensajes de servicios Web XML.

Esta clase permite serializaci�n XML y Desearializaci�n XML. La serializaci�n permite crear a partir de las variables y propiedades p�blicas de una clase un objeto XML serializado. El m�todo Serialize de la clase XmlSerializer permite crear un archivo XML de tipo (System.IO.StreamWriter) a partir de una clase por medio de una objeto serializado. El m�todo Deserialize de la clase XmlSerializer permite crear objeto con la informaci�n deseralizada proveniente de un archivo XML.

Codigo de ejemplo    
 

Nota:
En este ejemplo supongo que existe un proyecto de tipo Windows form y una forma principal donde se desarrolla en c�digo. Tambi�n he omitido el c�digo del inicializeCompomentes.


1. Para el ejemplo primero  creamos una forma que almacena informaci�n de contacto como Nombre, Direcci�n, Tel�fono,  e-mail para la aplicaci�n (en controles textbox). Estos son los datos que serializaremos y almacenaremos en un archivo XML.  Como se muestra en la forma siguiente.

 2. Luego creamos una clase llamada Contactos que incluir� una variable miembro p�blica por cada uno de los campos a almacenar en el archivo xml. La clase debe incluir un constructor por default (sin par�metros) 

    'Clase para Contactos
    Class Contacto
        Public Nombre As String
        Public Telefono As String
        Public Direccion As String
        Public email As String
        Public Sub New()
        End Sub
    End Class 

3. Ahora crearemos un m�todo CreateFileContactosXML que nos permite crear un archivo xml basados en los valores contenidos contenidos en la clase contacto. Este m�todo ser� llamado desde el Constructor de la Forma cuando el documento xml no exista y  al cerrar  la forma para actualizar el documento XML.

    Private Sub CreateFileContactosXML()
        'Crear objeto y poblarlo
        Dim objContactos As New Contacto
        objContactos.Nombre = txtNombre.Text
        objContactos.Telefono = txtTelefono.Text
        objContactos.Direccion = txtDireccion.Text
        objContactos.email = txtEmail.Text
   'Crear un objeto serializado para la clase contactos
   Dim objWriter As New Serialization.XmlSerializer(GetType(Contacto))
   'Crear un objeto file de tipo StremWriter para almacenar el documento xml
   Dim objfile As New StreamWriter("Contacto.xml")
  'Serializar y crear el documento XML
   objWriter.Serialize(objfile, objContactos)
  'Cerrar el archivo
   objfile.Close()
End Sub

4. Ahora crearemos un m�todo que nos permite leer un archivo xml, deserializarlo y cargarlo en la forma. Este m�todo ser� llamado al cargar la forma cuando el documento XML ya exista.

'OpenFileContactosXML
'Abrir archivo XML y Mostrarlo en los controles dela forma.
    Private Sub OpenFileContactosXML()
    'Leer un archivo XML y cargarlo en un objeto
        Dim xmlReader As New XmlTextReader(Application.StartupPath + "Contacto.xml")
        'Crear un objeto para deserializar el archivo XML
        Dim Reader As New Serialization.XmlSerializer(GetType(Contacto))
        'Deserialziar el archivo xml y cargarlo en un objeto
        Dim ContactosRead = Reader.Deserialize(xmlReader)
        'Cargar los datos en la forma.
        txtNombre.Text = ContactosRead.nombre
        txtDireccion.Text = ContactosRead.Direccion
        txtTelefono.Text = ContactosRead.telefono
        txtEmail.Text = ContactosRead.email
        'Cerrar Archivo XML
        xmlReader.Close()
    End Sub

 5. Modificar el constructor de la forma para crear o mostrar la informaci�n del documento xml.  Utilizando  

    Public Sub New()
    MyBase.New()
        'El Dise�ador de Windows Forms requiere esta llamada.
        InitializeComponent()

        'Agregar cualquier inicializaci�n despu�s de la llamada a InitializeComponent()
        Dim fa As New FileInfo(Application.StartupPath & "Contacto.xml")
        If fa.Exists Then
            OpenFileContactosXML()
        Else
            CreateFileContactosXML()
        End If
    End Sub

6.  Crear los manejadores de eventos para actualizar la informaci�n del documento XML

    Private Sub btOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
   Handles btOk.Click
        'Crear archivo XML con informacion del contacto
        CreateFileContactosXML()
        Me.Close()
    End Sub
    Private Sub frmOptions_Closed(ByVal sender As Object, ByVal e As System.EventArgs)
   Handles     MyBase.Closed
         CreateFileContactosXML()
    End Sub
Conclusiones. 

La clase XmlSerializer nos  provee un mecanismo sencillo para crear archivos xml a partir de objetos.   Esto nos permitir� con gran facilidad manipular documentos xml existentes o crear nuestros propios documentos xml, yo lo encuentro especialmente interesante para manipular informaci�n de configuraci�n de las aplicaciones y para guardar el estado de las propiedades publicas de una clase.

Gracias por calificar este articulo!!! 

ir al ndice