none
Utilizar Xml.Serialization ou Montar na Mão? RRS feed

  • Pergunta

  • Boa tarde pessoal,

    Estou inicializando um projeto onde utilizarei bastante XML, então gostaria de fazer uma pergunta simples. Pensando em performasse e facilidade de manutenção. Qual seria a melhor abordagem para montar os xml em uma aplicação C#:

     A) Utilizar o System.Xml.Serialization, onde crio uma classe que representa o xml e converto utilizando essa biblioteca?

    using System.IO;
    using System.Xml;
    using System.Xml.Serialization;
    
    namespace TowelIT.Domain.Layout
    {
        public class TesteXml
        {
            [XmlElement("id")]
            public int Id { get; set; }
    
            [XmlElement("nome")]
            public string Nome { get; set; }
    
            [XmlElement("sobrenome")]
            public string Sobrenome { get; set; }
    
            public string ToXml()
            {
                var serializer = new XmlSerializer(typeof(TesteXml));
                using (StringWriter textWriter = new StringWriter())
                {
                    serializer.Serialize(textWriter, this);
                    return textWriter.ToString();
                }
            }
    
            public static TesteXml LoadFromXMLString(string xmlText)
            {
                var serializer = new XmlSerializer(typeof(TesteXml));
                using (var stringReader = new StringReader(xmlText))
                    return serializer.Deserialize(stringReader) as TesteXml;
            }
        }
    }

     B) Utilizo uma classe que representa o xml e crio um método ToXml() ou monto na mão esse xml?

    using System.Text;
    using System.Xml;
    
    namespace TowelIT.Domain.Layout
    {
        public class TesteXml
        {
            public int Id { get; set; }
            public string Nome { get; set; }
            public string Sobrenome { get; set; }
    
            public string ToXml()
            {
                var result = new StringBuilder();
    
                result.Append("<TesteXml>");
                result.Append($"<id>{Id}</id>");
                result.Append($"<nome>{Nome}</nome>");
                result.Append($"<sobrenome>{Sobrenome}</sobrenome>");
                result.Append("</TesteXml>");
    
                return result.ToString();
            }
    
            public static TesteXml LoadFromXMLString(string xmlText)
            {
                var result = new TesteXml();
    
                var xml = new XmlDocument();
                xml.LoadXml(xmlText);
    
                var elementId = xml.GetElementsByTagName("id");
                if (elementId != null && elementId.Count > 0)
                    result.Id = int.Parse(elementId[0].InnerText);
    
                var elementNome = xml.GetElementsByTagName("nome");
                if (elementNome != null && elementNome.Count > 0)
                    result.Nome = elementNome[0].InnerText;
    
                var elementSobrenome = xml.GetElementsByTagName("sobrenome");
                if (elementSobrenome != null && elementSobrenome.Count > 0)
                    result.Sobrenome = elementSobrenome[0].InnerText;
    
                return result;
            }
        }
    }

    Lembrando que o meu cenário vai ser receber dados transformar em xml e transmitir via um webService. E terei um grande volume de dados. Com isso em mente qual seria a melhor implementação entre as duas ou se existem implementações melhore do que eu sugeri.


    sábado, 10 de dezembro de 2016 21:26

Todas as Respostas