Для клиента мы разрабатываем веб-службы WCF. Наши контракты с сообщениями определяются с использованием атрибутов DataContract и DataMember поверх наших классов и их свойств. Атрибут DataMember имеет дополнительные свойства, которые позволяют нам добавлять дополнительные правила. Например, если свойство всегда должно быть доступно, мы используем (IsRequired = true); чтобы указать это. Эти правила проверяются при получении или отправке сообщения.WCF IsRequired Attribute dilemma
[DataContract]
public class TestClass
{
[DataMember(IsRequired = true)]
public int RequiredValue { get; set; }
}
Однако во время нашего теста мы заметили, что он не работает, потому что на клиентской стороне RequiredValueField инициализируется нулем, поэтому с некоторым чтением я нашел это свойство, EmitDefaultValue = ложь, поэтому при использовании обоих, я получить желаемый результат
[DataContract]
public class TestClass
{
[DataMember(IsRequired = true, EmitDefaultValue=false)]
public int RequiredValue { get; set; }
}
но предположим, если какой-то клиент инициализации RequiredValue = 0
, а затем вызвать метод сервиса, он дает ошибку снова. Итак, как бесплатные мои APIusers с возможностью, чтобы они могли передавать какую-либо вещь в этом члене, включая ноль, но когда они опускают, тогда только она должна давать ошибку?