Introducción a la Serialización
La serialización es el proceso de convertir un objeto en una secuencia de bytes para almacenarlo o transferirlo. Su contraparte, la deserialización, permite reconstruir el objeto a partir de esos bytes. Este mecanismo es esencial para la persistencia de datos y la comunicación entre aplicaciones.
En .NET, existen varios tipos de serialización, pero en este artículo nos enfocaremos en la serialización XML y en el uso de LINQ to XML para manipular datos XML.
Serialización XML en .NET
XmlSerializer
XmlSerializer es una clase del espacio de nombres System.Xml.Serialization
que permite serializar objetos en formato XML. Sus principales métodos son:
- Serialize: Convierte un objeto en una representación XML.
- Deserialize: Convierte un XML en un objeto .NET.
Pasos para Serializar un Objeto en XML
- Definir la clase del objeto a serializar.
- Instanciar un objeto de la clase
XmlSerializer
con el tipo del objeto a serializar. - Usar el método
Serialize
para convertir el objeto a XML.
Ejemplo de Serialización
using System;
using System.IO;
using System.Xml.Serialization;
public class Persona {
public string Nombre { get; set; }
public string Domicilio { get; set; }
}
class Program {
static void Main() {
Persona p = new Persona { Nombre = "Pepe", Domicilio = "C/ Mayor,1" };
XmlSerializer xmlS = new XmlSerializer(typeof(Persona));
using (StreamWriter writer = new StreamWriter("persona.xml")) {
xmlS.Serialize(writer, p);
}
}
}
Ejemplo de Deserialización
using (FileStream fs = new FileStream("persona.xml", FileMode.Open)) {
Persona p = (Persona)xmlS.Deserialize(fs);
Console.WriteLine(p.Nombre);
Console.WriteLine(p.Domicilio);
}
Control de Serialización con Atributos
Podemos personalizar la serialización con atributos como:
[XmlElement(ElementName = "DomicilioParticular")]
para cambiar el nombre del campo en XML.[XmlIgnore]
para excluir propiedades de la serialización.
public class Persona {
[XmlElement(ElementName = "DomicilioParticular")]
public string Domicilio { get; set; }
[XmlIgnore]
public string Nombre { get; set; }
}
Serialización Binaria
La serialización binaria es una alternativa más eficiente que XML cuando los datos solo se comparten entre aplicaciones .NET.
Uso de BinaryFormatter
using System;
using System.IO;
using System.Runtime.Serialization;
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 p = new Persona { Nombre = "Pepe", Edad = 30 };
IFormatter formatter = new BinaryFormatter();
using (Stream fs = new FileStream("datos.bin", FileMode.Create)) {
formatter.Serialize(fs, p);
}
}
}
La deserialización se hace de la misma manera:
using (Stream fs = new FileStream("datos.bin", FileMode.Open)) {
Persona p = (Persona)formatter.Deserialize(fs);
Console.WriteLine(p.Nombre);
}
LINQ to XML en .NET
LINQ to XML es una tecnología que permite manipular documentos XML de forma eficiente y elegante utilizando LINQ.
Creación de XML con LINQ to XML
using System;
using System.Xml.Linq;
class Program {
static void Main() {
XElement articulo = new XElement("Articulo",
new XAttribute("id", 1),
new XElement("Nombre", "Laptop"),
new XElement("Precio", 1200)
);
Console.WriteLine(articulo);
}
}
Lectura y Modificación de XML
XDocument doc = XDocument.Load("datos.xml");
var nombres = from e in doc.Descendants("Articulo")
select e.Element("Nombre").Value;
foreach (var nombre in nombres)
Console.WriteLine(nombre);
Podemos modificar elementos:
doc.Element("Articulos").Element("Articulo").Element("Precio").SetValue(1300);
doc.Save("datos.xml");
Conclusión
La serialización XML y el uso de LINQ to XML son herramientas fundamentales en .NET para el almacenamiento y manipulación de datos. Si trabajas con aplicaciones que requieren persistencia de datos estructurados, dominar estas técnicas te permitirá optimizar el rendimiento y la organización del código.
Si quieres aprender más, revisa la documentación oficial de Microsoft.