对于客户,我们正在开发一些WCF Web服务。我们的消息契约是通过在类及其属性之上使用DataContract和DataMember属性来定义的。 DataMember属性具有一些额外的属性,允许我们添加一些额外的规则。例如,如果属性应始终可用,我们使用(IsRequired = true);表明这一点。收到或发送邮件时会检查这些规则。
[DataContract]
public class TestClass
{
[DataMember(IsRequired = true)]
public int RequiredValue { get; set; }
}
然而,在我们的测试中,我们注意到它不起作用,因为在客户端,RequiredValueField被初始化为null,所以在一些读数中我发现了这个属性,EmitDefaultValue = false,所以通过使用两者,我得到了期望的结果
[DataContract]
public class TestClass
{
[DataMember(IsRequired = true, EmitDefaultValue=false)]
public int RequiredValue { get; set; }
}
但是假设,如果某个客户端初始化RequiredValue = 0
然后调用服务方法,则会再次出错。 那么如何释放我的APIusers,并选择他们可以传递此成员中的任何内容,包括零,但是当它们省略时,只有它应该给出错误?
答案 0 :(得分:1)
EmitDefaultValue
设置为false
,除非绝对必要?请阅读this MSDN page的最后一节以了解原因。 EmitDefaultValue
设置为false
时,为您的服务生成的WSDL具有一些注释,这些注释仅由WCF理解。即通过这样做,您可以限制您的服务的互操作性。这是你的要求吗?解决您的问题:
使您的DataMember“RequiredValue”成为可以为空的int。
[DataMember(IsRequired = true,EmitDefaultValue=false)]
public int? RequiredValue { get; set; }
通过这样做,RequiredValue
数据成员的默认值将为null
,您将能够毫无问题地设置零(0)。