2009-10-03 4 views
26

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

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

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

Вводный параграф в Data Member Order предполагает, что заказ введен в действие по выбору, но я не нашел способ сделать его необязательным.

последующий вопрос: Simple data file versioning with DataContractSerializer

ответ

17

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

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

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

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

+4

Я просто добавляю новое значение в существующий файл. Было немного сюрпризом, что я должен вставить его не только с правильным именем, но и в правильном месте. –

Смежные вопросы