WCF数据合同/序列化

时间:2010-07-20 14:41:40

标签: wcf serialization datacontract xmlserializer

我创建了一个简单的WCF应用程序,它暴露了一个操作。此操作将复合数据类型作为参数。

我没有用[DataContract]属性修饰这个复合数据类型。但这是有效的,我可以在WSDL中看到Schema。

现在我的理解是这个新的自定义类型应该用[Serializable]或[dataContract]属性进行修饰,以参与Web服务操作。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:11)

自.NET 3.5 SP1以来,WCF已经引入了POCO支持,并且您no longer need使用[DataContract][DataMember]属性来装饰对象。公共属性将自动公开。虽然我建议您使用这些属性明确标记它们。

答案 1 :(得分:5)

正如Darin所说,sp1引入了对推断数据合同的支持。如果编组类型是公共类型且未使用DataContract属性进行修饰,则WCF将自动推断此类属性并将DataMemeber属性应用于该类型的所有公共成员。

在他的“编程WCF服务”一书中,JuvalLöwy说;

  

在我看来,依赖于推断的数据合同是一个草率的黑客攻击,与WCF中的大多数其他内容相悖。 ...使用DataContract属性,并明确您的数据协定。这样您就可以使用数据合约功能,例如版本控制。