【问题标题】:Hide public properties from DataContract从 DataContract 隐藏公共属性
【发布时间】:2011-01-27 23:02:28
【问题描述】:

我从所有公共属性中删除了 [DataMember] 属性,但这些属性仍显示在我的 WCF 操作结果中。我发现这个链接 here 解释了如果 .Net 位于线路的两端,那么 DataMember 对确定 DataContract 中包含哪些属性没有太大影响。

那么,如何将公共属性排除在 WCF 结果中?

谢谢

【问题讨论】:

  • 带有属性 IgnoreDataMember?

标签: wcf datacontract datamember


【解决方案1】:

WCF 中的序列化有几种不同的工作方式。它们被概述here。请注意,也可以使用 [Serializable] 类。

请注意该列表中的最后一项:从 3.5 SP1 开始,未使用任何选项注释的类仍可被 WCF 基础结构序列化。但是,如果这样做,您将无法控制序列化的发生方式以及序列化的属性(这就是为什么我个人认为添加该选项是错误的,但这是另一回事了)。

您删除 [DataContract][DataMember] 属性有什么原因吗?

【讨论】:

  • 我删除了 [DataContract][DataMember] 属性来测试会发生什么。我很失望地得知他们无法控制包含哪些属性。那么,如何使用 WCF 将公共属性排除在序列化之外?感谢您的回复。
  • 好吧,您可以使用 [Serializable] + [NonSerializable],也可以显式使用 [DataContract] + [DataMember]。您不应该尝试避免 [DataContract] 的一个非常重要的原因是它提供了一种显式控制合同中字段顺序的方法(通过 [DataMember] 的 Order 属性,即 very i> 对版本控制很重要(因为 WCF 中的默认顺序是字母顺序,而不是声明顺序)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多