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.