[C#] Serializar y deserializar objetos en XML
En este post veremos como guardar un objeto c# a un archivo xml y como cargarlo.
Código Serializador
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace Datos
{
public static class SerializadorXML
{
public static object Deserializar(XmlDocument xml, Type type)
{
XmlSerializer s = new XmlSerializer(type);
string xmlString = xml.OuterXml.ToString();
byte[] buffer = ASCIIEncoding.UTF8.GetBytes(xmlString);
MemoryStream ms = new MemoryStream(buffer);
XmlReader reader = new XmlTextReader(ms);
object o = null;
try
{
o = s.Deserialize(reader);
}
finally
{
reader.Close();
}
return o;
}
public static T Deserializar(XmlDocument xml)
{
return (T)Deserializar(xml, typeof(T));
}
public static XmlDocument Serializar(object o)
{
XmlSerializer s = new XmlSerializer(o.GetType());
XmlDocument xml = null;
MemoryStream ms = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(ms, new UTF8Encoding());
writer.Formatting = Formatting.Indented;
writer.IndentChar = ' ';
writer.Indentation = 5;
try
{
s.Serialize(writer, o);
xml = new XmlDocument();
string xmlString = ASCIIEncoding.UTF8.GetString(ms.ToArray());
xml.LoadXml(xmlString);
}
finally
{
writer.Close();
ms.Close();
}
return xml;
}
}
}
Ejemplo
// Clase que almacenaremos
public class Persona
{
private string nombre;
public string Nombre
{
get { return nombre; }
set { nombre = value; }
}
private DateTime nacimiento;
public DateTime Nacimiento
{
get { return nacimiento; }
set { nacimiento= value; }
}
/* SUPONIENDO QUE NO QUIERO QUE SE GUARDE ESTO: */
private bool fooBar;
[XmlIgnore] // << Agrego este atributo a la property
public bool FooBar
{
get { return fooBar; }
set { fooBar = value; }
}
}
// Clase administradora de nuestro ejemplo
public static class Ejemplo
{
public static Persona CargarPersona(string file)
{
XmlDocument doc = new XmlDocument();
doc.Load(file);
return SerializadorXML.Deserializar(doc);
}
public static void GuardarPersona(string file, Persona persona)
{
XmlDocument doc = SerializadorXML.Serializar(persona);
doc.Save(file);
}
}
Comentarios
Publicar un comentario