2009-10-03 8 views
26

Lors de la désérialisation, DataContractSerializer requiert non seulement qu'un élément name corresponde, mais également qu'il soit dans un certain ordre par rapport aux autres éléments.Ignorer l'ordre des champs dans DataContractSerializer

Mon application est telle que chaque champ peut être identifié de façon unique par son nom. Je voudrais donc que le fichier XML contienne les éléments dans n'importe quel ordre et que le désérialiseur fonctionne encore.

Est-il possible de configurer un DataContract comme celui-ci?

Le paragraphe d'introduction dans Data Member Order suggère que l'ordre est appliqué éventuellement, mais je n'ai pas trouvé un moyen de le rendre réellement facultatif.

Suivi question: Simple data file versioning with DataContractSerializer

Répondre

17

Non, ce n'est pas en option. Il est facultatif de spécifier explicitement un ordre, mais dans le cas contraire, l'ordre est déterminé par les règles de base auxquelles vous êtes lié (types de base en premier, alphabétique, ...). Le paragraphe introductif implique simplement que vous n'avez pas toujours besoin de connaître ou de vous soucier de la commande, par exemple si vous utilisez un proxy généré.

Si vous utilisez DataContractSerializer pour désérialiser un fichier, la meilleure solution que je puisse envisager serait d'utiliser XSLT pour le transformer dans le bon ordre avant de le désérialiser.

Si vous appelez un service Web (pour lequel DataContractSerializer a été conçu), il est préférable de respecter la commande dans le contrat.

+4

J'ajoute juste une nouvelle valeur à un fichier existant. C'était un peu une surprise que je dois l'insérer non seulement avec le nom correct mais aussi à l'endroit correct. –