Qualquer forma de fazer XmlSerializer xml de saída em uma ordem definida?
-
03-07-2019 - |
Pergunta
Atualmente estou usando XmlSerializer para serializar e desserializar um objeto. A XML é gerado numa ordem indefinido o que é compreensível, mas torna irritante quando comparando versões do objecto, uma vez que a ordem das propriedades é diferente de cada vez. Assim, por exemplo, eu não pode usar uma ferramenta de comparação normal ver as diferenças.
Existe uma maneira fácil de gerar o meu xml na mesma ordem a cada vez, sem escrever as ReadXml e WriteXml mim mesmo? Eu tenho um monte de propriedades na classe, e adicionar novos e agora cada vez, por isso preferem não tem que escrever e depois manter esse código.
(C # NET 2.0)
Solução
O atributo XmlElement tem um propriedade de ordem . Você pode usar isso como um começo.
Se você precisa encontrar o diff em arquivos XML, você pode querer dar uma olhada em este .
Outras dicas
Decore suas propriedades com o XmlElementAttribute , ajustando o parâmetro a Order .
ps: Eu não acredito que o XML gerado pelo XmlSerializer está em uma ordem indefinida. Pode ser indocumentado, mas sabe-se. Eu acredito que, na ausência da Ordem atributos, o XmlSerializer serializa todas as propriedades públicas, alfa-ordenados pelo nome prop, e, em seguida, todo o público Fields, alfa-classificadas por nome.