Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


9.2. Creando un objeto serializable

Vamos a guardar todo un objeto (incluyendo los valores de sus atributos) en un fichero. En primer lugar, tendremos que indicar "[Serializable]" antes de la clase:

[Serializable]
public class Persist02

En segundo lugar, como vamos a sobrescribir todo el objeto, en vez de sólo los atributos, ahora los métodos "Cargar" y "Guardar" ya no pueden pertenecer a esa misma clase: deberán estar en una clase auxiliar, que se encargue de salvar los datos y recuperarlos. En este primer ejemplo, nos limitaremos a declararlos "static" para que sea Main el que se encargue de esas tareas:

public static void Guardar(string nombre, Persist02 objeto)

El programa completo podría ser algo como

// Ejemplo_09_02a.cs
// Ejemplo bsico de persistencia
// Introduccin a C#, por Nacho Cabanes

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class Persist02
{

    int numero;

    public void SetNumero(int n)
    {
        numero = n;
    }

    public int GetNumero()
    {
        return numero;
    }

    // Mtodos para guardar en fichero y leer desde l

    public static void Guardar(string nombre, Persist02 objeto)
    {
        IFormatter formatter = new BinaryFormatter();
        Stream stream = new FileStream(nombre,
            FileMode.Create, FileAccess.Write, FileShare.None);
        formatter.Serialize(stream, objeto);
        stream.Close();
    }

    public static Persist02 Cargar(string nombre)
    {
        Persist02 objeto;
        IFormatter formatter = new BinaryFormatter();
        Stream stream = new FileStream(nombre, 
            FileMode.Open, FileAccess.Read, FileShare.Read);
        objeto = (Persist02)formatter.Deserialize(stream);
        stream.Close();
        return objeto;
    }


    public static void Main()
    {
        Persist02 ejemplo = new Persist02();
        ejemplo.SetNumero(5);
        Console.WriteLine("Valor: {0}", ejemplo.GetNumero());
        Guardar("ejemplo.dat", ejemplo);

        Persist02 ejemplo2 = new Persist02();
        Console.WriteLine("Valor 2: {0}", ejemplo2.GetNumero());
        ejemplo2 = Cargar("ejemplo.dat");
        Console.WriteLine("Y ahora: {0}", ejemplo2.GetNumero());
    }
}

Y su resultado sería el mismo que antes:

Valor: 5
Valor 2: 0
Y ahora: 5

Ejercicios propuestos:

Ejercicio propuesto 9.2.1: