Share via


Tutorial: Guardar un objeto en Visual Basic

Actualización: noviembre 2007

Aunque en tiempo de diseño se pueden establecer las propiedades de un objeto en valores predeterminados, cualquier valor introducido en tiempo de ejecución se pierde cuando se destruye el objeto. Puede usar la serialización en Visual Basic para guardar los datos de un objeto entre instancias, lo que permite almacenar valores y recuperarlos la próxima vez que se cree una instancia del objeto.

Para almacenar datos simples, como un nombre o un número, puede usar el objeto My.Settings. Para obtener más información, vea My.Settings (Objeto).

En este tutorial, creará un objeto Loan simple y guardará sus datos en un archivo. Recuperará a continuación los datos del archivo al volver a crear el objeto. Por último, modificará el código para almacenar el objeto con un formato SOAP.

Nota de seguridad:

En este ejemplo se crea un nuevo archivo, si el archivo no existe ya. Si una aplicación debe crear un archivo, necesitará tener permisos Create en la carpeta correspondiente. Los permisos se establecen usando listas de control de acceso. Sin embargo, si el archivo ya existe, la aplicación sólo precisará el permiso de Write, un permiso menor. Por tanto, siempre que sea posible, resulta más seguro crear el archivo durante la implementación y conceder sólo permisos Read a un único archivo (en lugar de conceder permisos Create a una carpeta). También es más seguro escribir datos en carpetas de usuario que en la carpeta raíz o en la carpeta Archivos de programa.

Nota de seguridad:

En este ejemplo se almacenan datos en un formato de archivo binario o SOAP. Estos formatos no se deben usar con datos confidenciales, como contraseñas o información de la tarjeta de crédito.

Nota:

Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los valores de configuración o de edición activos. Para cambiar su configuración, haga clic en Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Crear el objeto Loan

El primer paso consiste en crear una clase Loan y una aplicación de prueba que utilice esta clase.

Para crear la clase Loan

  1. Cree un nuevo proyecto Biblioteca de clases y denomínelo "LoanClass". Para obtener más información, vea Cómo: Crear soluciones y proyectos.

  2. En el Editor de código, cambie el nombre de la clase de "Class1" a "Loan".

  3. Agregue a la clase los miembros públicos siguientes:

    Public LoanAmount As Double = 10000.0
    Public InterestRate As Double = 7.5
    Public Term As Integer = 36
    Public Customer As String
    

También tendrá que crear una aplicación simple que utilice la clase Loan.

Para crear una aplicación de prueba

  1. Para agregar un proyecto de aplicación para Windows a la solución, haga clic en el menú Archivo, a continuación en Agregar y, por último, en Nuevo proyecto.

  2. En el cuadro de diálogo Agregar nuevo proyecto, escriba LoanApp como el nombre del proyecto y haga clic en Aceptar para cerrar el cuadro de diálogo.

  3. En el Explorador de soluciones, seleccione el proyecto LoanApp.

  4. En el menú Proyecto, haga clic en Establecer como proyecto de inicio.

  5. En el menú Proyecto, haga clic en Agregar referencia.

  6. En el cuadro de diálogo Agregar referencia, haga clic en la ficha Proyectos y seleccione el proyecto LoanClass.

  7. Haga clic en Aceptar para cerrar el cuadro de diálogo.

  8. En el diseñador, agregue cuatro controles TextBox al formulario.

  9. En el Editor de códigos, agregue el siguiente código:

    Private TestLoan As New LoanClass.Loan
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles MyBase.Load
        TextBox1.Text = TestLoan.LoanAmount.ToString
        TextBox2.Text = TestLoan.InterestRate.ToString
        TextBox3.Text = TestLoan.Term.ToString
        TextBox4.Text = TestLoan.Customer
    End Sub
    

Llegado este punto, puede generar y ejecutar la aplicación. Observe que los valores predeterminados de la clase Loan aparecen en los cuadros de texto. Pruebe a cambiar el valor del tipo de interés de 7,5 a 7,1 y, a continuación, cierre la aplicación y ejecútela de nuevo; el valor vuelve a ser el predeterminado de 7,5.

En el mundo real, los tipos de interés cambian periódicamente, pero no forzosamente cada vez que se ejecuta la aplicación. En lugar de hacer que el usuario actualice el tipo de interés cada vez que se ejecute la aplicación, sería mejor guardar el tipo de interés más reciente entre las instancias de la aplicación. En el paso siguiente, hará exactamente eso agregando la serialización a la clase Loan.

Usar serialización para guardar el objeto

Para guardar los valores de la clase Loan, primero debe marcarse la clase con el atributo Serializable.

Para marcar una clase como serializable

  • Cambie la declaración de la clase Loan del modo siguiente:

    <Serializable()> Public Class Loan
    

El atributo Serializable indica al compilador que todo el contenido de la clase se puede guardar en un archivo. En este caso, es probable que sólo desee guardar el miembro InterestRate, y no los miembros Customer, LoanAmount o Period. El atributo NonSerialized se puede utilizar para marcar miembros de clase que no deberían guardarse. Por razones de simplicidad, en este ejemplo se guarda todo excepto el miembro Customer.

Para evitar que un miembro se serialice

  • Cambie la declaración del miembro Customer del modo siguiente:

    <NonSerialized()> Public Customer As String
    

El paso siguiente es agregar el código de serialización a la aplicación LoanApp. Para serializar la clase y escribirla en un archivo, utilizará los espacios de nombres System.IO y System.Xml.Serialization. Para no tener que escribir los nombres completos, puede usar la instrucción Imports.

Para agregar referencias a espacios de nombres

  • Agregue las siguientes instrucciones Imports al comienzo de la clase Form1:

    Imports System.IO
    Imports System.Runtime.Serialization.Formatters.Binary
    

    En este caso, está usando un formateador para guardar el objeto en un formato binario. Más adelante en este tutorial modificará el código para guardar el objeto en un formato SOAP.

El paso siguiente es agregar código para deserializar el objeto del archivo cuando se cree.

Para deserializar un objeto

  1. Agregue una constante a la clase para el nombre de archivo de datos serializados.

    Const FileName As String = "SavedLoan.bin"
    
  2. Modifique el código del procedimiento de evento Form1_Load del modo siguiente:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles MyBase.Load
        If File.Exists(FileName) Then
            Dim TestFileStream As Stream = File.OpenRead(FileName)
            Dim deserializer As New BinaryFormatter
            TestLoan = CType(deserializer.Deserialize(TestFileStream), LoanClass.Loan)
            TestFileStream.Close()
        End If
        TextBox1.Text = TestLoan.LoanAmount.ToString
        TextBox2.Text = TestLoan.InterestRate.ToString
        TextBox3.Text = TestLoan.Term.ToString
        TextBox4.Text = TestLoan.Customer
    End Sub
    

    Observe que primero tiene que comprobar que el archivo existe. Si es así, cree una clase Stream para leer el archivo binario y una clase BinaryFormatter para traducirlo. El método CType se usa para convertir del tipo de la secuencia al tipo del objeto Loan.

A continuación, tiene que agregar código para guardar los datos introducidos en los cuadros de texto de la clase Loan y, a continuación, debe serializar la clase en un archivo.

Para guardar los datos y serializar la clase

  • Agregue el siguiente código al procedimiento de evento Form1_Closing:

    Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As _
    System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        TestLoan.LoanAmount = CType(TextBox1.Text, Double)
        TestLoan.InterestRate = CType(TextBox2.Text, Double)
        TestLoan.Term = CType(TextBox3.Text, Integer)
        TestLoan.Customer = TextBox4.Text
    
        Dim TestFileStream As Stream = File.Create(FileName)
        Dim serializer As New BinaryFormatter
        serializer.Serialize(TestFileStream, TestLoan)
        TestFileStream.Close()
    End Sub
    

Llegado este punto, puede volver a generar y ejecutar la aplicación. Inicialmente, los valores predeterminados aparecen en los cuadros de texto. Pruebe a cambiar los valores e introducir un nombre en el cuarto cuadro de texto. Cierre la aplicación y, a continuación, ejecútela de nuevo. Observe que los valores nuevos aparecen ahora en los cuadros de texto, excepto el nombre del cliente que se marcó como NonSerialized.

Guardar el objeto con un formato SOAP

En este ejemplo se ha mostrado hasta ahora cómo guardar un objeto en un archivo de texto usando un formato binario, que resulta correcto para la mayoría de las aplicaciones Windows; sin embargo, para las aplicaciones web o los servicios web XML, es conveniente guardar el objeto en un archivo XML mediante un formato SOAP, que facilita compartir el objeto.

Para guardar el objeto en un formato SOAP, primero debe hacerse referencia a la clase SoapFormatter. La clase SoapFormatter reside en su propio espacio de nombres: System.Runtime.Serialization.Formatters.Soap.

Para guardar el objeto con un formato SOAP

  1. En el Explorador de soluciones, seleccione el proyecto LoanApp.

  2. En el menú Proyecto, haga clic en Agregar referencia.

  3. En el cuadro de diálogo Agregar referencia, haga clic en la ficha .NET y seleccione el componente System.Runtime.Serialization.Formatters.Soap.

  4. Haga clic en Aceptar para cerrar el cuadro de diálogo.

  5. En el Editor de código, agregue una instrucción Imports al comienzo del módulo Form1:

    Imports System.Runtime.Serialization.Formatters.Soap
    
  6. Cambie el nombre de archivo de SavedLoan.bin a SavedLoan.xml.

  7. En el procedimiento de evento Form1_Load, cambie la instrucción Dim de Dim deserializer As New BinaryFormatter a:

    Dim deserializer As New SoapFormatter
    
  8. En el procedimiento de evento Form1_Closing, cambie la instrucción Dim de Dim serializer As New BinaryFormatter a:

    Dim serializer As New SoapFormatter
    

Llegado este punto, puede generar y probar la aplicación. La primera vez que ejecute la aplicación, se creará el archivo SavedLoan.xml. Para ver el archivo, elija la opción Mostrar todos los archivos en el Explorador de soluciones; se encuentra en el nodo Bin del proyecto de aplicación para Windows.

Nota:

Si ya se encuentra en el modo Mostrar todos los archivos, para ver el archivo tendrá que actualizar la vista; para ello, seleccione Actualizar en el menú Ver.

Observe que los tres miembros de la clase LoanClass se muestran en formato XML. Cambie el valor de InterestRate en el archivo XML, a continuación guárdelo y ejecute la aplicación de nuevo. El nuevo tipo de interés aparecerá en el segundo cuadro de texto.

Vea también

Conceptos

Equivalentes de PropertyBag para usuarios de Visual Basic 6.0

Fundamentos de la serialización de .NET Framework