Игнорировать порядок полей в DataContractSerializer - PullRequest
27 голосов
/ 03 октября 2009

При десериализации DataContractSerializer требует не только совпадения элемента name , но и того, что он находится в определенном порядке по отношению к другим элементам.

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

Можно ли настроить DataContract следующим образом?

Вводный абзац в Порядок элементов данных предполагает, что порядок применяется , необязательно , но я не нашел способа сделать его необязательным.

Дополнительный вопрос : Простое управление версиями файла данных с помощью DataContractSerializer

1 Ответ

18 голосов
/ 03 октября 2009

Нет, это не обязательно. Необязательно указывать порядок явно, но в противном случае порядок определяется основными правилами, с которыми вы связаны (сначала базовые типы, буквенные, ...).

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

Если вы используете DataContractSerializer для десериализации файла, лучшее решение, которое я могу придумать, это использовать XSLT для преобразования его в правильный порядок перед десериализацией.

Если вы вызываете веб-сервис (для чего был разработан DataContractSerializer), вам лучше придерживаться порядка в контракте.

...