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
Persona
està marcada amb l'atribut[Serializable]
per permetre la serialització. - Serialització: Es crea un objecte
FileStream
per escriure en un fitxer.BinaryFormatter
s'utilitza per serialitzar l'objectepersona
en format binari. - 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
- Definició de la Classe: La classe
Persona
no necessita l'atribut[Serializable]
per a la serialització XML. - Serialització: Es crea un objecte
FileStream
per escriure en un fitxer.XmlSerializer
s'utilitza per serialitzar l'objectepersona
en format XML. - Deserialització: Es llegeix el fitxer i es reconstrueix l'objecte
personaDeserialitzada
a partir del format XML.
Exercicis Pràctics
Exercici 1: Serialització Binària
- Crea una classe
Cotxe
amb propietatsMarca
iModel
. - Serialitza una instància de
Cotxe
en 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
Llibre
amb propietatsTítol
iAutor
. - Serialitza una instància de
Llibre
en 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ó