2010-12-16 86 views
1

具有[DataContract]属性的类是否不会自动序列化? 如果不是,是否需要使用[Serializable]属性(或从ISerialize继承)?WCF DataContract需要序列化?

我问这是因为我有一个来自以前项目的旧代码,显然[DataContract]类没有提及任何关于序列化的明确内容。

最终的问题: 我想要一个WCF操作(方法)返回一个DataContract类。 该方法是否必须在返回它之前显式序列化该类,还是自动序列化?我一直认为这将是后者。

谢谢!

回答

4

不,[Serializable]在数据合同中是不需要的。 XML序列化也不是必需的。

+0

因此,从一个WCF方法内,我可以返回一个DataContract类型的对象,而无需在返回时在xml中手动序列化?换句话说,我可以简单地返回DataContract对象,它将被xml序列化,对吧? – AlvinfromDiaspar 2010-12-16 17:26:55

+0

@Alvin:没错。我建议你在Visual Studio中创建一个新的WCF服务,并查看它创建的代码。它完全是这样。 – 2010-12-16 19:31:51

1

在.NET中有几个序列化选项。 SerializableAttribute和ISerializable可以回到开头,并由BinaryFormatter,SoapFormatter等使用。

DataContractSerializer相对较新,可以支持使用SerializableAttribute定义其序列化能力的对象,但这不是必需的。如果您只是使用DataContractSerializer序列化对象,那么只需使用数据协定属性即可。

显然,标记为可序列化的成员也必须是可序列化的类型。请参阅Types Supported by the Data Contract Serializer

+0

因此,DataContract属性看起来像是告诉它首先使用DataContractSerializer。 – AlvinfromDiaspar 2010-12-16 17:11:04

+0

@Alvin:不,数据合约序列化程序是默认的。 – 2010-12-16 19:32:09