Por que usar a ferramenta xsd.exe para criar uma classe para o esquema XSD e depois usar o serializador para criar o arquivo XML, quando você pode usar o XDocument?
Devo sempre usar XDocument
e criar manualmente o documento XML aninhando XElement
elementos ou há algo que não estou vendo que torna o uso do esquema XSD XmlSerializer
melhor?
XDocument
eXmlSerializer
/xsd.exe
são úteis para diferentes tipos de coisas.Quando você está lidando com um documento XML grande, você realmente deveria ter um esquema XSD. Este é um acordo entre todas as partes sobre qual deve ser a estrutura do documento XML, quais propriedades / filhos / tipos de dados ele tem, etc.
Se você tem um XSD, então você pode muito bem usá-lo para gerar classes C#. Você pode escrever
XDocument
o código manualmente, mas então você precisa continuar se referindo ao XSD para ver quais propriedades/filhos você deve estar acessando, e quais são seus tipos de dados. Se o XSD mudar, você tem que ir e procurar manualmente no seuXDocument
código por coisas que precisam ser mudadas.Se, em vez disso, você gerar classes C#, então as propriedades que você pode acessar, e seus tipos de dados, estarão lá no sistema de tipos: você não precisa se referir ao XSD. Se o XSD mudar, você pode gerar novamente suas classes C# e obter erros do compilador em lugares que você precisa mudar.
Se você tiver um XSD, você também deve validar se os documentos XML recebidos correspondem a esse XSD, veja por exemplo esta resposta .
XmlSerializer
é frequentemente também mais eficiente do queXDocument
.No entanto, às vezes você precisa trabalhar com o documento XML de outra pessoa, e ou não há XSD ou as classes C# geradas são muito mais complexas do que você precisa. Ou às vezes você está apenas fazendo algo muito simples e não vale a pena escrever um XSD. Ou às vezes o XML faz algo realmente irritante que não mapeia bem para classes C#. Nesses casos, usar
XDocument
geralmente é a melhor escolha.(A única coisa que você deve evitar a todo custo é
XmlDocument
-- que faz a mesma coisa queXDocument
, mas muito pior.)