[How To] Serializador anidado utilizando la clase XmlSerializer
En esta ocasión, nos basaremos en la entrada publicada la semana pasada aquí.En esta ocasión necesitamos obtener un XML anidado con varios elementos y sus respectivos atributos:
?<?xml version="1.0" encoding="utf-8"?> <ejemplo> <padre> <hijo Atributo1="" otroatributo="soy otro atributo"> <Codigo>0</Codigo> <Texto /> <Fecha>2017-02-24T14:30:05.2897119-03:00</Fecha> </hijo> </padre> </ejemplo>
Serializar una clase
Aquí recibimos como parámetro un objeto y lo convertimos a XML.Primeramente, creamos la clase (que se convertirá al formato XML):
using System; using System.Xml.Serialization; namespace ConsoleBlog { [XmlRoot("ejemplo")] public class Ejemplo { private Padre padre_ = new Padre(); [XmlElement("padre")] public Padre Padre { get { return padre_; } set { padre_ = value; } } } [XmlType("padre")] public class Padre { private Hijo hijo_ = new Hijo(); [XmlElement("hijo")] public Hijo Hijo { get { return hijo_; } set { hijo_ = value; } } } [XmlType("hijo")] public class Hijo { private int codigo = 0; private string nombre = string.Empty; private DateTime fecha = DateTime.Now; private string atributo1 = string.Empty; private string atributo2 = "soy otro atributo"; private string nomeincluyen = ":("; [XmlElement] public int Codigo { get { return codigo; } set { codigo = value; } } [XmlElement("Texto")] public string Nombre { get { return nombre; } set { nombre = value; } } [XmlElement] public DateTime Fecha { get { return fecha; } set { fecha = value; } } [XmlAttribute] public string Atributo1 { get { return atributo1; } set { atributo1 = value; } } [XmlAttribute("otroatributo")] public string Atributo2 { get { return atributo2; } set { atributo2 = value; } } [XmlIgnore] public string Nomeincluyen { get { return nomeincluyen; } set { nomeincluyen = value; } } } }El método para serializar la clase y convertirlo a XML sería:
public static string SerializarXML() { //XML a ser retornado string resultado = string.Empty; //Variables para definición de XML XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); XmlSerializer serializer = new XmlSerializer(typeof(Ejemplo)); Ejemplo ejemplo = new Ejemplo(); Encoding encoding = Encoding.GetEncoding("UTF-8"); XmlWriterSettings xmlWriterSettings = new XmlWriterSettings { Indent = true, OmitXmlDeclaration = false, Encoding = encoding }; //Agregar un espacio de nombres vacío ns.Add("", ""); //Se utiliza using para que el objeto sea eliminado luego de su uso using (var stream = new MemoryStream()) { //Creamos un XML using (var xmlWriter = XmlWriter.Create(stream, xmlWriterSettings)) { //Convertimos la clase en XML serializer.Serialize(xmlWriter, ejemplo, ns); } //Asignamos el XML creado a nuestra variable resultado = encoding.GetString(stream.ToArray()); } return resultado; }Luego realizamos la llamada y retornamos el XML:
static void Main(string[] args) { string xml = Program.SerializarXML(); Console.WriteLine(xml); Console.ReadKey(); }Para deserializar se utiliza el mismo método utilizado en el artículo anterior.
0 comentarios: