Является ли атрибут DataMember IsRequired в сочетании с типом Nullable противоречивым? - PullRequest
15 голосов
/ 14 октября 2011

Я сталкивался сегодня с этим в контракте WCF:

[DataMember(IsRequired = true)]
public DateTime? LastModified { get; set; } 

Каковы последствия IsRequired = True и обнуляемого DateTime?Они кажутся противоречащими друг другу.

Ответы [ 2 ]

9 голосов
/ 14 октября 2011

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

Вот аналогичное противоречие, которое может ответить на ваш вопрос.

Взаимодействие с IsRequired

Атрибут DataMemberAttribute имеет свойство IsRequired (по умолчанию установлено значение false).Свойство указывает, должен ли данный элемент данных присутствовать в сериализованных данных при его десериализации.Если для IsRequired задано значение true (что указывает на то, что значение должно присутствовать), а для EmitDefaultValue установлено значение false (это означает, что значение не должно присутствовать, если для него установлено значение по умолчанию), значения по умолчанию для этого элемента данных не могут бытьсериализованный, потому что результаты будут противоречивыми.Если для такого элемента данных установлено значение по умолчанию (обычно ноль или ноль) и выполняется попытка сериализации, генерируется исключение SerializationException.

3 голосов
/ 14 октября 2011

Предположение: у вас ДОЛЖЕН быть узел для LastModified (= требуется), но содержимое может быть пустым (= значение равно нулю).

...