WCF数据合同 - 实施所需值的最佳/最简洁方法?

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,这将抛出异常 - 这是所需的行为.这是在客户端执行所需属性的最佳实践吗?让一切都可以为空并在服务端检查它有什么好处吗?

Adi*_*dil 5

我不认为这是一个很好的方法,使所有这些都可以Nullable,因为客户不会通过你的合同知道,如果真的需要一个字段.

如果你申请IsRequired=true那么它必须提供字段值,否则它会抛出异常,但这种方法比Nullable更好......

在许多情况下,我使用DTO(数据传输对象)进行不同的服务......具有必填字段......