首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF IsRequired属性困境

WCF IsRequired属性困境
EN

Stack Overflow用户
提问于 2012-03-15 11:07:13
回答 1查看 5.7K关注 0票数 1

对于一个客户,我们正在开发一些WCF网络服务。我们的消息契约是通过在类及其属性之上使用DataContract和DataMember属性定义的。DataMember属性有一些额外的属性,允许我们添加一些额外的规则。例如,如果一个属性应该总是可用的,我们将使用(IsRequired=true);来表示这一点。当接收或发送消息时,将检查这些规则。

代码语言:javascript
复制
[DataContract]
public class TestClass      
{  
    [DataMember(IsRequired = true)]  
    public int RequiredValue { get; set; }      
}

然而,在我们的测试中,我们注意到它不起作用,因为在客户端,RequiredValueField是由null初始化的,所以通过阅读,我找到了这个属性,EmitDefaultValue=false,所以使用这两个属性,我得到了想要的结果

代码语言:javascript
复制
[DataContract]  
public class TestClass  
{  
        [DataMember(IsRequired = true, EmitDefaultValue=false)]  
        public int RequiredValue { get; set; }  
} 

但是假设,如果某个客户端初始化了RequiredValue = 0,然后调用了服务方法,那么它会再次产生错误。,那么如何释放我的APIusers,让它可以传递这个成员中的任何东西,包括零,但是当它们省略时,它应该只给出错误

EN

回答 1

Stack Overflow用户

发布于 2013-02-07 07:57:07

  1. 你没有提到你“想要的”结果是什么。我是说你想要达到的目标。
  2. 您知道吗,除非绝对必要,否则MS不建议将EmitDefaultValue设置为false?请阅读此MSDN页面的最后一节来了解原因。
  3. 当您将EmitDefaultValue设置为false时,为您的服务生成的false有一些注释,只有WCF才能理解这些注释。也就是说,通过这样做,您可以限制您的服务的互操作性。这是你的要求吗?

解决您的问题:

使您的DataMember "RequiredValue“成为可空的int。

代码语言:javascript
复制
[DataMember(IsRequired = true,EmitDefaultValue=false)]  
    public int? RequiredValue { get; set; }

这样做,RequiredValue数据成员的默认值将是null,并且您将能够设置零(0)而不存在任何问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9718443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档