为什么WCF突然需要DataContractAttributes?

Bru*_*ant 1 wcf

我在应用程序中构建了许多WCF服务.直到最近,用作服务中许多操作的参数的大多数类都没有应用DataContract或DataMember属性.

现在,我连续做了一些更改,突然之间WCF抱怨他无法序列化我的类.

有谁知道配置中的任何更改,甚至ServiceContract,OperationContract等是否会导致WCF对它可以序列化的类变得挑剔?

我宁愿不需要这些类中的属性(它们应该是尽可能纯的C#类).

另外值得注意的是,如果我在源代码控制中返回到以前的版本,WCF会回到"正常"状态,所以我认为它不是机器/环境的东西.

All*_*nek 5

在不使用[DataContract][DataMember]属性的情况下创建WCF数据协定的功能是在.NET 3.5 SP1中添加到WCF的功能.因为在将代码还原到以前的版本时,一切都适合您,我假设您已经使用了至少该版本.

尽管如此,为了使类可以由WCF序列化,该类必须满足此处列出的几个要求.数据合同类的主要要求是:

  • 它必须是公开的.
  • 它必须具有无参数构造函数.
  • 它不得有任何不满足所有这些要求的数据成员.如果您确实有这样的成员,请将其标记,[IgnoreDataMember]并将从WCF序列化中排除.

您可以通过使用DataContractSerializer该类手动执行序列化来获取有关无法序列化的更多信息.有关更多详细信息和代码示例,请参阅此文章 另一种方法是标记所有成员[IgnoreDataMember]并逐渐从成员中删除属性,直到序列化失败,这将告诉您哪个成员导致了问题.