2009-03-04 2 views
6

Derzeit verwende ich XmlSerializer zum Serialisieren und Deserialisieren eines Objekts. Das XML wird in einer undefinierten Reihenfolge generiert, die zwar verständlich ist, aber beim Vergleich von Versionen des Objekts nervt, da die Reihenfolge der Eigenschaften jedes Mal anders ist. So kann ich zum Beispiel kein normales Diff-Tool verwenden, um Unterschiede zu erkennen.Wie kann XmlSerializer xml in einer definierten Reihenfolge ausgeben?

Gibt es eine einfache Möglichkeit, mein XML in der gleichen Reihenfolge jedes Mal zu generieren, ohne die Methoden ReadXml und WriteXml selbst zu schreiben? Ich habe viele Eigenschaften in der Klasse und füge immer wieder neue hinzu, also würde ich es vorziehen, diesen Code nicht schreiben und dann pflegen zu müssen.

(C# 2,0)

+0

Können Sie ein Beispiel angeben, das diese "nicht definierte Reihenfolge" reproduziert? Ich habe es noch nie gesehen, und ich sehe nicht, wie der XML-Serializer das Ergebnis deserialisieren könnte, wenn es passiert wäre. –

Antwort

9

XMLELEMENT Attribut hat ein order property. Sie können das als Anfang verwenden.

Wenn Sie das diff in Xml-Dateien finden müssen, können Sie sich this ansehen.

0

ps: Ich glaube nicht, dass das XML, das vom XmlSerializer erzeugt wird, in einer undefinierten Reihenfolge ist. Es mag undokumentiert sein, aber es ist bekannt. Ich glaube, dass der XmlSerializer in Abwesenheit von Order-Attributen alle öffentlichen Eigenschaften serialisiert, alphabetisch sortiert nach Prop-Namen und dann alle öffentlichen Felder alphabetisch nach Namen sortiert.