La serialització és el procés de convertir un objecte en un format que es pot emmagatzemar o transmetre i després reconstruir-lo més tard. En C#, la serialització és una tècnica essencial per a la persistència d'objectes, la comunicació entre aplicacions i la transmissió de dades a través de xarxes.

Objectius d'Aprenentatge

Al final d'aquest tema, hauràs après:

  • Què és la serialització i deserialització.
  • Com utilitzar la serialització binària i XML en C#.
  • Com personalitzar el procés de serialització.

Conceptes Clau

  1. Serialització i Deserialització

  • Serialització: Convertir un objecte en un format que es pot emmagatzemar o transmetre.
  • Deserialització: Reconstruir l'objecte original a partir del format serialitzat.

  1. Tipus de Serialització

  • Serialització Binària: Converteix objectes en un format binari compacte.
  • Serialització XML: Converteix objectes en un format XML llegible per humans.

Serialització Binària

Exemple de Serialització Binària

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

[Serializable]
public class Persona
{
    public string Nom { get; set; }
    public int Edat { get; set; }
}

class Program
{
    static void Main()
    {
        Persona persona = new Persona { Nom = "Joan", Edat = 30 };

        // Serialitzar l'objecte
        FileStream fs = new FileStream("persona.dat", FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(fs, persona);
        fs.Close();

        // Deserialitzar l'objecte
        fs = new FileStream("persona.dat", FileMode.Open);
        Persona personaDeserialitzada = (Persona)formatter.Deserialize(fs);
        fs.Close();

        Console.WriteLine($"Nom: {personaDeserialitzada.Nom}, Edat: {personaDeserialitzada.Edat}");
    }
}

Explicació del Codi

  1. Definició de la Classe: La classe Persona està marcada amb l'atribut [Serializable] per permetre la serialització.
  2. Serialització: Es crea un objecte FileStream per escriure en un fitxer. BinaryFormatter s'utilitza per serialitzar l'objecte persona en format binari.
  3. Deserialització: Es llegeix el fitxer i es reconstrueix l'objecte personaDeserialitzada a partir del format binari.

Serialització XML

Exemple de Serialització XML

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

public class Persona
{
    public string Nom { get; set; }
    public int Edat { get; set; }
}

class Program
{
    static void Main()
    {
        Persona persona = new Persona { Nom = "Joan", Edat = 30 };

        // Serialitzar l'objecte
        FileStream fs = new FileStream("persona.xml", FileMode.Create);
        XmlSerializer serializer = new XmlSerializer(typeof(Persona));
        serializer.Serialize(fs, persona);
        fs.Close();

        // Deserialitzar l'objecte
        fs = new FileStream("persona.xml", FileMode.Open);
        Persona personaDeserialitzada = (Persona)serializer.Deserialize(fs);
        fs.Close();

        Console.WriteLine($"Nom: {personaDeserialitzada.Nom}, Edat: {personaDeserialitzada.Edat}");
    }
}

Explicació del Codi

  1. Definició de la Classe: La classe Persona no necessita l'atribut [Serializable] per a la serialització XML.
  2. Serialització: Es crea un objecte FileStream per escriure en un fitxer. XmlSerializer s'utilitza per serialitzar l'objecte persona en format XML.
  3. Deserialització: Es llegeix el fitxer i es reconstrueix l'objecte personaDeserialitzada a partir del format XML.

Exercicis Pràctics

Exercici 1: Serialització Binària

  1. Crea una classe Cotxe amb propietats Marca i Model.
  2. Serialitza una instància de Cotxe en un fitxer binari.
  3. Deserialitza l'objecte i mostra les propietats per consola.

Solució

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

[Serializable]
public class Cotxe
{
    public string Marca { get; set; }
    public string Model { get; set; }
}

class Program
{
    static void Main()
    {
        Cotxe cotxe = new Cotxe { Marca = "Toyota", Model = "Corolla" };

        // Serialitzar l'objecte
        FileStream fs = new FileStream("cotxe.dat", FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(fs, cotxe);
        fs.Close();

        // Deserialitzar l'objecte
        fs = new FileStream("cotxe.dat", FileMode.Open);
        Cotxe cotxeDeserialitzat = (Cotxe)formatter.Deserialize(fs);
        fs.Close();

        Console.WriteLine($"Marca: {cotxeDeserialitzat.Marca}, Model: {cotxeDeserialitzat.Model}");
    }
}

Exercici 2: Serialització XML

  1. Crea una classe Llibre amb propietats Títol i Autor.
  2. Serialitza una instància de Llibre en un fitxer XML.
  3. Deserialitza l'objecte i mostra les propietats per consola.

Solució

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

public class Llibre
{
    public string Títol { get; set; }
    public string Autor { get; set; }
}

class Program
{
    static void Main()
    {
        Llibre llibre = new Llibre { Títol = "El Quixot", Autor = "Miguel de Cervantes" };

        // Serialitzar l'objecte
        FileStream fs = new FileStream("llibre.xml", FileMode.Create);
        XmlSerializer serializer = new XmlSerializer(typeof(Llibre));
        serializer.Serialize(fs, llibre);
        fs.Close();

        // Deserialitzar l'objecte
        fs = new FileStream("llibre.xml", FileMode.Open);
        Llibre llibreDeserialitzat = (Llibre)serializer.Deserialize(fs);
        fs.Close();

        Console.WriteLine($"Títol: {llibreDeserialitzat.Títol}, Autor: {llibreDeserialitzat.Autor}");
    }
}

Resum

En aquest tema, hem après què és la serialització i deserialització, i hem explorat com utilitzar la serialització binària i XML en C#. També hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. La serialització és una tècnica poderosa que permet emmagatzemar i transmetre objectes de manera eficient, i és una habilitat essencial per a qualsevol programador de C#.

© Copyright 2024. Tots els drets reservats