2009-10-03 11 views
26

Beim Deserialisieren erfordert DataContractSerializer nicht nur, dass ein Element Name übereinstimmt, sondern auch, dass es in einer bestimmten Reihenfolge in Bezug auf die anderen Elemente ist.Ignorieren Feld Reihenfolge in DataContractSerializer

Meine Anwendung ist so, dass jedes Feld eindeutig durch seinen Namen identifiziert werden kann. Daher möchte ich, dass die XML-Datei die Elemente in beliebiger Reihenfolge enthält und der Deserializer weiterhin funktioniert.

Ist es möglich, einen DataContract so einzurichten?

Der einleitende Absatz in Data Member Order schlägt vor, dass die Reihenfolge erzwungen wird optional, aber ich habe keinen Weg gefunden, es tatsächlich optional zu machen.

Follow-up Frage: Simple data file versioning with DataContractSerializer

Antwort

17

Nein, es ist nicht optional ist. Es ist optional, eine Reihenfolge explizit anzugeben, ansonsten wird die Reihenfolge durch die Grundregeln bestimmt, mit denen Sie verknüpft sind (Basistypen zuerst, alphabetisch, ...).

Der einleitende Absatz bedeutet einfach, dass Sie die Bestellung nicht immer kennen oder beachten müssen - zum Beispiel, wenn Sie einen generierten Proxy verwenden.

Wenn Sie mit DataContractSerializer eine Datei deserialisieren, wäre die beste Lösung, die ich mir vorstellen kann, XSLT zu verwenden, um es vor dem Deserialisieren in die richtige Reihenfolge umzuwandeln.

Wenn Sie einen Webdienst aufrufen (für welchen DataContractSerializer wurde er entwickelt), sollten Sie besser auf die Bestellung im Vertrag achten.

+4

Ich füge nur einen neuen Wert zu einer vorhandenen Datei hinzu. Es war eine kleine Überraschung, dass ich es nicht nur mit dem richtigen Namen, sondern auch an der richtigen Stelle einfügen musste. –

Verwandte Themen