- Curso
- Serialización de datos
- BinaryFormatter: Serialización binaria
BinaryFormatter: Serialización binaria
Última actualización:
23/08/2020
⁃
Dificultad:
Intermedio
Crea un programa en C# para serializar y deserializar objetos en formato binario. Para ello puede utilizar la clase BinaryFormatter
incluida en el espacio de nombres System.Runtime.Serialization
.
Primero implementa una clase Persona con tres propiedades (Nombre, Edad y Ciudad). La clase Ciudad tendrá dos propiedades (Nombre y Población). Luego crea un objeto persona y utiliza el serializador del objeto BinaryFormatter
para guardar los datos en un archivo binario, más tarde, deserializa el archivo y imprímelo en pantalla. Recuerde preparar un método ToString()
para imprimir la clase Persona.
Entrada
Salida
Solución
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
public class SerializacionBinaria
{
static string nombreArchivo = "out.json";
public static void Main(string[] args)
{
Persona persona = new Persona()
{
Nombre = "Nauj",
Edad = 26,
Ciudad = new Ciudad()
{
Nombre = "Spain",
Poblacion = 13456766
}
};
Serializar(persona);
persona = Deserializar();
Console.WriteLine(persona.ToString());
}
public static void Serializar(Persona p)
{
IFormatter f = new BinaryFormatter();
using (Stream stream = new FileStream(nombreArchivo,
FileMode.Create, FileAccess.Write, FileShare.None))
{
f.Serialize(stream, p);
}
}
public static Persona Deserializar()
{
Persona p;
IFormatter f = new BinaryFormatter();
using (Stream stream = new FileStream(nombreArchivo,
FileMode.Open, FileAccess.Read, FileShare.Read))
{
p = (Persona)f.Deserialize(stream);
}
return p;
}
[Serializable]
public class Persona
{
public string Nombre { get; set; }
public int Edad { get; set; }
public Ciudad Ciudad { get; set; }
public override string ToString()
{
StringBuilder str = new StringBuilder();
str.AppendLine("Nombre: " + Nombre);
str.AppendLine("Edad: " + Edad);
str.AppendLine("Ciudad: " + Ciudad.Nombre);
return str.ToString();
}
}
[Serializable]
public class Ciudad
{
public string Nombre { get; set; }
public int Poblacion { get; set; }
}
}