Есть ли способ заставить XmlSerializer выводить xml в определенном порядке? - PullRequest
6 голосов
/ 04 марта 2009

В настоящее время я использую XmlSerializer для сериализации и десериализации объекта. XML генерируется в неопределенном порядке, что понятно, но раздражает при сравнении версий объекта, поскольку порядок свойств каждый раз различается. Так, например, я не могу использовать обычный инструмент сравнения, чтобы увидеть какие-либо различия.

Есть ли простой способ генерировать мой xml в одном и том же порядке каждый раз, не написав самостоятельно методы ReadXml и WriteXml? У меня много свойств в классе, и я время от времени добавляю новые, поэтому предпочитаю не писать и не поддерживать этот код.

(C # .net 2.0)

Ответы [ 3 ]

9 голосов
/ 04 марта 2009

Атрибут XmlElement имеет свойство порядка . Вы можете использовать это как начало.

Если вам нужно найти diff в файлах Xml, вы можете взглянуть на this .

2 голосов
/ 04 марта 2009

Украсьте свои свойства с помощью XmlElementAttribute , установив параметр Порядок .

0 голосов
/ 06 марта 2009

пс: я не верю, что XML, сгенерированный XmlSerializer, находится в неопределенном порядке. Это может быть недокументировано, но это известно. Я считаю, что в отсутствие атрибутов Order XmlSerializer сериализует все открытые свойства, отсортированные по альфа-имени по имени пропеллера, а затем все открытые поля по алфавиту, отсортированные по имени.

...