Сгенерированные классы xsd.exe не сериализуют атрибуты значений по умолчанию - PullRequest
5 голосов
/ 05 марта 2010

У меня есть несколько файлов .cs, сгенерированных xsd.exe схемой XSD.

Моя проблема заключается в том, что при попытке сериализации этих классов в xml атрибуты, значения которых соответствуют значениям по умолчанию, определенным в схеме xsd, не сериализуются.

Я узнал, что моя проблема решена, когда я удаляю [System.ComponentModel.DefaultValueAttribute(typeof(<someType>), "<SomeValue>")] атрибут для члена, представляющего поле по умолчанию.

Итак, мой вопрос, не существует ли более элегантного способа сделать это? Например, есть ли способ указать, что я все равно хочу сериализовать значения по умолчанию?

1 Ответ

4 голосов
/ 08 марта 2010

Короткие версии: да. похоже, это самый простой подход.

Я пробовал «очевидные» вещи (в частности, шаблоны *Specified и ShouldSerialize*, которые поддерживает XmlSerializer, но также IsNullable), и он просто продолжает не включать значение.

Следующие параметры будут либо IXmlSerializable (что довольно сложно), либо XmlAttributeOverrides (дублирование усилий) - ни один из них не является здесь особенно заманчивым. Интересно, ваш нынешний подход - меньше работы? Конечно, вы можете просто экспортировать WSDL и отредактировать его, чтобы удалить значение по умолчанию (и сгенерировать из отредактированной версии).

В качестве отступления - если это был WCF, есть [DataMember(EmitDefaultValue = ...)], который контролирует ; может быть, они добавили это как запрос функции?

...