[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 DeserializarEjemplo(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; } } }
// 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