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 ericeec@hotmail.com

 


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