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
- Serialización Binaria: Convierte un objeto en una secuencia de bytes.
- Serialización XML: Convierte un objeto en un formato XML.
- Serialización JSON: Convierte un objeto en un formato JSON.
- 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
- Atributo
[Serializable]
: Marca la clasePersona
como serializable. - BinaryFormatter: Utilizado para la serialización y deserialización binaria.
- 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
- XmlSerializer: Utilizado para la serialización y deserialización XML.
- 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
- JsonSerializer: Utilizado para la serialización y deserialización JSON.
- File.WriteAllText y File.ReadAllText: Utilizados para escribir y leer archivos de texto.
Ejercicio Práctico
Ejercicio
- Crea una clase
Libro
con las propiedadesTitulo
,Autor
yAño
. - Serializa una instancia de
Libro
en formato JSON y guárdala en un archivo. - 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#.
Curso de Programación en C#
Módulo 1: Introducción a C#
- Introducción a C#
- Configuración del Entorno de Desarrollo
- Programa Hola Mundo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
Módulo 2: Estructuras de Control
Módulo 3: Programación Orientada a Objetos
- Clases y Objetos
- Métodos
- Constructores y Destructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
Módulo 4: Conceptos Avanzados de C#
- Interfaces
- Delegados y Eventos
- Genéricos
- Colecciones
- LINQ (Consulta Integrada en el Lenguaje)
- Programación Asíncrona
Módulo 5: Trabajando con Datos
Módulo 6: Temas Avanzados
- Reflexión
- Atributos
- Programación Dinámica
- Gestión de Memoria y Recolección de Basura
- Multihilo y Programación Paralela
Módulo 7: Construcción de Aplicaciones
Módulo 8: Mejores Prácticas y Patrones de Diseño
- Estándares de Codificación y Mejores Prácticas
- Patrones de Diseño
- Pruebas Unitarias
- Revisión y Refactorización de Código