La serialización es el proceso de convertir un objeto en una secuencia de bytes para almacenarlo o transmitirlo a través de una red. La deserialización es el proceso inverso, donde se convierte una secuencia de bytes en un objeto. En C#, la serialización es una característica poderosa que permite guardar el estado de un objeto y restaurarlo cuando sea necesario.

Conceptos Clave

  1. Serialización Binaria: Convierte un objeto en una secuencia de bytes.
  2. Serialización XML: Convierte un objeto en un formato XML.
  3. Serialización JSON: Convierte un objeto en un formato JSON.
  4. Atributos de Serialización: Controlan cómo se serializan los objetos.

Serialización Binaria

Ejemplo Práctico

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

[Serializable]
public class Persona
{
    public string Nombre { get; set; }
    public int Edad { get; set; }
}

class Program
{
    static void Main()
    {
        Persona persona = new Persona { Nombre = "Juan", Edad = 30 };

        // Serialización
        BinaryFormatter formatter = new BinaryFormatter();
        using (FileStream stream = new FileStream("persona.bin", FileMode.Create))
        {
            formatter.Serialize(stream, persona);
        }

        // Deserialización
        using (FileStream stream = new FileStream("persona.bin", FileMode.Open))
        {
            Persona deserializedPersona = (Persona)formatter.Deserialize(stream);
            Console.WriteLine($"Nombre: {deserializedPersona.Nombre}, Edad: {deserializedPersona.Edad}");
        }
    }
}

Explicación

  1. Atributo [Serializable]: Marca la clase Persona como serializable.
  2. BinaryFormatter: Utilizado para la serialización y deserialización binaria.
  3. FileStream: Utilizado para leer y escribir archivos.

Serialización XML

Ejemplo Práctico

using System;
using System.IO;
using System.Xml.Serialization;

public class Persona
{
    public string Nombre { get; set; }
    public int Edad { get; set; }
}

class Program
{
    static void Main()
    {
        Persona persona = new Persona { Nombre = "Juan", Edad = 30 };

        // Serialización
        XmlSerializer serializer = new XmlSerializer(typeof(Persona));
        using (FileStream stream = new FileStream("persona.xml", FileMode.Create))
        {
            serializer.Serialize(stream, persona);
        }

        // Deserialización
        using (FileStream stream = new FileStream("persona.xml", FileMode.Open))
        {
            Persona deserializedPersona = (Persona)serializer.Deserialize(stream);
            Console.WriteLine($"Nombre: {deserializedPersona.Nombre}, Edad: {deserializedPersona.Edad}");
        }
    }
}

Explicación

  1. XmlSerializer: Utilizado para la serialización y deserialización XML.
  2. FileStream: Utilizado para leer y escribir archivos.

Serialización JSON

Ejemplo Práctico

using System;
using System.IO;
using System.Text.Json;

public class Persona
{
    public string Nombre { get; set; }
    public int Edad { get; set; }
}

class Program
{
    static void Main()
    {
        Persona persona = new Persona { Nombre = "Juan", Edad = 30 };

        // Serialización
        string jsonString = JsonSerializer.Serialize(persona);
        File.WriteAllText("persona.json", jsonString);

        // Deserialización
        jsonString = File.ReadAllText("persona.json");
        Persona deserializedPersona = JsonSerializer.Deserialize<Persona>(jsonString);
        Console.WriteLine($"Nombre: {deserializedPersona.Nombre}, Edad: {deserializedPersona.Edad}");
    }
}

Explicación

  1. JsonSerializer: Utilizado para la serialización y deserialización JSON.
  2. File.WriteAllText y File.ReadAllText: Utilizados para escribir y leer archivos de texto.

Ejercicio Práctico

Ejercicio

  1. Crea una clase Libro con las propiedades Titulo, Autor y Año.
  2. Serializa una instancia de Libro en formato JSON y guárdala en un archivo.
  3. Deserializa el archivo JSON y muestra las propiedades del objeto Libro en la consola.

Solución

using System;
using System.IO;
using System.Text.Json;

public class Libro
{
    public string Titulo { get; set; }
    public string Autor { get; set; }
    public int Año { get; set; }
}

class Program
{
    static void Main()
    {
        Libro libro = new Libro { Titulo = "Cien Años de Soledad", Autor = "Gabriel García Márquez", Año = 1967 };

        // Serialización
        string jsonString = JsonSerializer.Serialize(libro);
        File.WriteAllText("libro.json", jsonString);

        // Deserialización
        jsonString = File.ReadAllText("libro.json");
        Libro deserializedLibro = JsonSerializer.Deserialize<Libro>(jsonString);
        Console.WriteLine($"Titulo: {deserializedLibro.Titulo}, Autor: {deserializedLibro.Autor}, Año: {deserializedLibro.Año}");
    }
}

Retroalimentación

  • Error Común: Olvidar marcar una clase como [Serializable] para la serialización binaria.
  • Consejo: Siempre maneja excepciones al trabajar con archivos para evitar errores en tiempo de ejecución.

Conclusión

La serialización es una técnica esencial en C# para almacenar y transmitir objetos. Hemos cubierto los métodos de serialización binaria, XML y JSON, proporcionando ejemplos prácticos y un ejercicio para reforzar el aprendizaje. En el siguiente tema, exploraremos la conectividad con bases de datos, donde aprenderemos a interactuar con bases de datos desde nuestras aplicaciones C#.

© Copyright 2024. Todos los derechos reservados