是否需要自定义类型的序列化?

时间:2009-10-02 13:21:55

标签: c# web-services

我正在尝试更多地了解传统.NET Web服务的上下文中的序列化。假设我从我的一个.asmx方法返回一个复杂类型。这种类型是否必须在市场上销售?或者,Web服务引用和Web服务是否自己负责所有这些序列化和反序列化?

2 个答案:

答案 0 :(得分:1)

如果要通过线路发送复杂类型,则必须可序列化。您可以通过几种方式实现这一点,一种方法是使用Serializable属性,这很常见。但是,如果您的自定义类型不可序列化,那么您的Web服务将无法获取您的对象并将其放在线路上以发送给客户端。

答案 1 :(得分:1)

ASMX在内部使用XmlSerializer来序列化类型,因此所有常用的XmlSerializer规则都适用(类型需要具有公共无参数构造函数,任何公共字段和公共get / set属性都将被序列化,System.Xml.Serialization属性具有特殊性意思等。)

[Serializable]属性对XmlSerializer绝对没有意义,因此对ASMX也没有意义。它最初是为BinaryFormatter引入的(用于.NET远程处理),现在由DataContractSerializer(在WCF中使用)支持,作为推荐的[DataContract]编程模型的替代。