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 clasePersonacomo 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
Librocon las propiedadesTitulo,AutoryAño. - Serializa una instancia de
Libroen formato JSON y guárdala en un archivo. - Deserializa el archivo JSON y muestra las propiedades del objeto
Libroen 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
