2009-10-02 61 views
0

我想了解更多的上下文到舊的.NET Web服務序列化。比方說,我從我的.asmx方法之一返回一個複雜的類型。這種類型必須是可串行化的嗎?或者,Web服務引用和Web服務iteself是否負責所有這些序列化和反序列化?需要自定義類型的序列化?

回答

1

如果你想發送一個複雜的類型,它必須是可串行化的。你可以通過幾種方法來做到這一點,一種方法是使用Serializable屬性,這是很常見的。但是,如果您的自定義類型不是可序列化的,那麼您的Web服務將無法將您的對象放入網絡併發送給客戶端。

+0

...如果自定義類型包含其他自定義類型作爲內部字段,那麼這些類型也必須是可序列化的。 – 2009-10-02 13:41:59

+0

@Charles絕對......只是用Serializable屬性標記你的類型並不意味着你的類型實際上可以被序列化。如果Web服務試圖序列化它並由於內部字段或你有什麼而失敗,那麼你將得到一個SerializationException – Joseph 2009-10-02 13:46:37

1

ASMX在內部使用XmlSerializer序列化類型,因此所有常用的XmlSerializer規則都適用(類型需要具有公共的無參數構造函數,任何公共字段和公共get/set屬性都將被序列化,System.Xml.Serialization屬性具有特殊含義等)

[Serializable]屬性對於XmlSerializer是完全沒有意義的,因此對於ASMX也沒有任何意義。它最初是爲BinaryFormatter(在.NET遠程處理中使用的)引入的,現在由DataContractSerializer(在WCF中使用)支持,作爲推薦的[DataContract]編程模型的替代方法。

相關問題