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
- 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.
- 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
- Definició de la Classe: La classe
Personaestà marcada amb l'atribut[Serializable]per permetre la serialització. - Serialització: Es crea un objecte
FileStreamper escriure en un fitxer.BinaryFormatters'utilitza per serialitzar l'objectepersonaen format binari. - Deserialització: Es llegeix el fitxer i es reconstrueix l'objecte
personaDeserialitzadaa 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
- Definició de la Classe: La classe
Personano necessita l'atribut[Serializable]per a la serialització XML. - Serialització: Es crea un objecte
FileStreamper escriure en un fitxer.XmlSerializers'utilitza per serialitzar l'objectepersonaen format XML. - Deserialització: Es llegeix el fitxer i es reconstrueix l'objecte
personaDeserialitzadaa partir del format XML.
Exercicis Pràctics
Exercici 1: Serialització Binària
- Crea una classe
Cotxeamb propietatsMarcaiModel. - Serialitza una instància de
Cotxeen un fitxer binari. - 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
- Crea una classe
Llibreamb propietatsTítoliAutor. - Serialitza una instància de
Llibreen un fitxer XML. - 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#.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada al Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Millors Pràctiques
- Patrons de Disseny
- Proves Unitàries
- Revisió de Codi i Refactorització
