是否需要WCF的DataContract属性

时间:2011-05-07 14:18:17

标签: c# .net wcf serialization

我正在编写WCF服务及其客户端。我想在服务和客户端之间发送/接收我的自定义类的对象。

我有3个模块

  • WCF服务
  • WCF客户端
  • 公共类库

WCF服务和客户端都引用了公共类库。 我不想用DataContract属性标记我的所有类。

所以,我的问题是“WCF需要DataContract属性吗?”

我使用.NET 4和netTcpBinding。

4 个答案:

答案 0 :(得分:23)

如果我没记错(IIRC),如果你不使用正式的数据合约标记,它默认就像一个字段序列化器。这样可以工作,但版本不太容易,因为私有更改可能会破坏客户端/服务器。 IMO您应该始终使用data-contract / data-member属性正式装饰WCF类型。如果没有它们,它将有效,但出于错误的原因(IIRC,最初没有正式标记没有工作)。

答案 1 :(得分:7)

  

“是否需要DataContract属性   对于WCF“

从技术上讲,没有。这取决于您是否使用DataContractSerializer(这是许多绑定的默认设置)。

还有其他选择:

  1. 考虑替代序列化程序
  2. 尝试使用Data Contract Surrogates(属性仍然需要某处,但它可能意味着你可以保持你的课程不受影响,如果那是相关的)
  3. 在序列化没有数据合约属性的类时,依靠serialization defaults

答案 2 :(得分:3)

你可以在WCF中使用几种串行技术,它是关于它的一个很好的适应性事物。看看:

http://msdn.microsoft.com/en-us/magazine/cc163569.aspx

答案 3 :(得分:3)

不需要使用DataContract属性,没有它们,您的服务就可以正常工作。

话虽如此,我真的不认为让您的服务和客户共享一个类库是最好的设计方法。如果你通过DataContracts暴露你的类型会更清楚。

有一天,有人想要使用您的服务但却无法访问共享类库会发生什么?