lin*_*use 4 wcf datacontract non-nullable isrequired
我有一个WCF数据契约与一堆原始类型的属性,如int和decimal,DateTime(当然,这是一个结构).
我的同事建议将它们全部为可空,然后通过检查null来验证服务端的必需值.我相信部分原因是因为它是一个可序列化的对象,所以你不能用数据契约上的构造函数强制执行所需的值 - 它避免了测试默认值的麻烦.
但是,我还希望在合同中隐含必需的属性,以便客户可以了解所需的属性.
所以不要做类似的事情,
[DataMember]
public Nullable<int> AgencyID { get; set; }
Run Code Online (Sandbox Code Playgroud)
这将允许我在服务端干净地测试null,我这样做:
[DataMember(IsRequired = true, EmitDefaultValue = true)]
public int AgencyID { get; set; }
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果没有为属性分配值或者默认值为0,这将抛出异常 - 这是所需的行为.这是在客户端执行所需属性的最佳实践吗?让一切都可以为空并在服务端检查它有什么好处吗?
我不认为这是一个很好的方法,使所有这些都可以Nullable,因为客户不会通过你的合同知道,如果真的需要一个字段.
如果你申请IsRequired=true那么它必须提供字段值,否则它会抛出异常,但这种方法比Nullable更好......
在许多情况下,我使用DTO(数据传输对象)进行不同的服务......具有必填字段......