对于一个客户,我们正在开发一些WCF网络服务。我们的消息契约是通过在类及其属性之上使用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,让它可以传递这个成员中的任何东西,包括零,但是当它们省略时,它应该只给出错误?
发布于 2013-02-07 07:57:07
EmitDefaultValue设置为false?请阅读此MSDN页面的最后一节来了解原因。EmitDefaultValue设置为false时,为您的服务生成的false有一些注释,只有WCF才能理解这些注释。也就是说,通过这样做,您可以限制您的服务的互操作性。这是你的要求吗?解决您的问题:
使您的DataMember "RequiredValue“成为可空的int。
[DataMember(IsRequired = true,EmitDefaultValue=false)]
public int? RequiredValue { get; set; }这样做,RequiredValue数据成员的默认值将是null,并且您将能够设置零(0)而不存在任何问题。
https://stackoverflow.com/questions/9718443
复制相似问题