Сериализировать обнуляемый тип в необязательный необнуляемый элемент

У меня есть схема xsd с необязательным элементом (minOccurs=0, maxOccurs=1) типаint, Элемент НЕ определен как nillable. В модели данных я хотел бы отобразить это в поле типа .netNullable<int>, гдеnull значение должно соответствовать элементу, отсутствующему в xml.

Однако, используяXmlSerializerкажется яимеют объявить обнуляемое поле в модели данных с помощью[XmlElement IsNullable=true], Если я установлюIsNullable=falseЯ получаю исключениеДля IsNullable не может быть установлено значение «false» для типа Nullable. «IsNullable не может быть установлено для« false »для типа Nullable. Рассмотрите возможность использования типа« System.Int32 »или удаления свойства IsNullable из атрибута XmlElement.«Но если я правильно понимаю, настройкаIsNullable=true (или не указывать атрибут) неявно устанавливает для элемента значение nillable и тем самым изменяет схему.

Это первый дизайн схемы, поэтому я не могу просто добавить nillable к элементам схемы.

Как мне сопоставить обнуляемые типы .net с ненулевыми элементами xml?

(Я понимаю, что я могу опустить nil-элементы при сериализации в xml, используя свойства XxxSpecified в модели данных, но, насколько я могу судить, этот подход все же требует добавления nillable в схему xsd.)

редактировать: Благодаря комментариям я теперь лучше понимаю проблему. На самом деле есть две отдельные проблемы:

Генераторы схемы к коду, такие как xsd.exe, создают ненулевой тип в сгенерированной модели, если элемент схемы не имеет нулевого значения (даже если это необязательно). Могу ли я переопределить это (используя любой известный генератор кода), чтобы я мог получать типы, допускающие значения NULL, в сгенерированном коде?

XmlSerializer требует обнуляемых типов в модели данных, чтобы иметь[XmlElement IsNullable=true]Это означает, что модель неявно добавляет 'nillable' к схеме. Могу ли я избежать этого?

Ответы на вопрос(2)

Ваш ответ на вопрос