对于客户,我们正在开发一些WCF Web服务 . 我们的消息 Contract 是通过在类及其属性之上使用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
然后调用服务方法,它会再次出错 . So how do free my APIusers with an option that they can pass any thing in this member including zero, but when they omit then only it should give error ?
1 回答
您还没有提到"desired"的结果 . 我的意思是你想要实现的目标 .
你知道MS不建议将
EmitDefaultValue
设置为false
,除非绝对必要吗?请阅读this MSDN page的最后一节以了解原因 .当您将
EmitDefaultValue
设置为false
时,为您的服务生成的WSDL具有一些注释,这些注释仅由WCF理解 . 即通过这样做,您可以限制您的服务的互操作性 . 这是你的要求吗?Solution to your problem:
使您的DataMember“RequiredValue”成为可以为空的int .
通过这样做,
RequiredValue
数据成员的默认值将是null
,您将能够设置零(0)而没有任何问题 .