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

时间:2012-12-06 17:07:01

标签: wcf datacontract non-nullable isrequired

我有一个WCF数据契约,其中包含一些原始类型的属性,如int和decimal,以及DateTime(当然,它是一个struct)。

我的同事建议将它们全部为可空,然后通过检查null来验证服务端的所需值。我相信部分原因是因为它是一个可序列化的对象,你不能用数据契约上的构造函数强制执行所需的值 - 它避免了测试默认值的麻烦。

但是,我还希望合同中隐含必需的属性,以便客户可以了解所需的属性。

所以不要做类似的事情,

[DataMember] 
public Nullable<int> AgencyID { get; set; }

这将允许我在服务端干净地测试null,我会这样做:

[DataMember(IsRequired = true, EmitDefaultValue = true)] 
public int AgencyID { get; set; }

据我了解,如果未为属性分配值或默认值为0,则会抛出异常 - 这是所需的行为。这是在客户端执行所需属性的最佳实践吗?让一切都可以为空并在服务端检查它有什么好处吗?

1 个答案:

答案 0 :(得分:5)

我不认为这是一个很好的方法,让所有人都可以成为Nullable,因为客户不会通过你的合同知道是否真的需要一个字段。

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

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