0

例如,將任意數據類型的複雜圖從WCF服務發送到Silverlight客戶端最簡單的方法是什麼? Here DataContractSerializer被提及爲WCF的默認序列化引擎。它還指出,「所有公開可見的類型都有一個沒有參數的構造函數」可以被序列化。這聽起來像是可以通過WCF服務發送任意類型。這是真的?不需要DataContracts,XmlElement屬性和類似的東西?假設它是真的,客戶端存在哪些限制(例如,僅使用.NET框架(的一個子集)的客戶端)?通過WCF Web服務序列化併發送對象圖的最簡單方法

此外,如果您可以告訴我,Silverlight客戶端的DataContractSerializer.WriteObject(Stream stream,Object graph)結合使用的最佳流將是非常好的。

+0

爲什麼你需要序列化它?爲什麼不把它歸還呢? – 2011-06-09 16:19:19

+0

你是對的,我實際上並不需要親自序列​​化它。我可以按照carlosfigueira的解釋方式進行,但有時只需要快速檢查序列化過程中是否發生任何異常(因爲使用代理時會出現相同的異常)。實際上,我的問題還有更多的事情要做:使我的類型可序列化的最簡單方法是什麼,如果沒有出現,很抱歉。 – user764754 2011-06-10 09:44:50

回答

1

是的,的確如此,您不需要用[DataContract],[Serializable],[Xml ...]來修飾WCF將其序列化的類。只要它們遵循一定的模式(無參數構造函數,僅序列化公共字段/屬性),您就可以發送任意類型的文件。在WCF http://www.pluralsight-training.net/community/blogs/aaron/archive/2008/05/13/50934.aspx有一篇關於POCO(普通的舊CLR對象)序列化的好文章。

就其他客戶端(如Silverlight)的限制而言,如果客戶端支持這些類型,那麼它也應該可以工作。

對於你的最後一個問題,它並不重要(只要你可以寫入流)。如果要將對象序列化到文件(在Silverlight隔離存儲中),則最終可能會使用FileStream;如果要直接通過網絡序列化對象,則可以使用由HttpWebRequest.EndGetRequestStream返回的流;如果你想做一些內存中的操作,你可以使用一個MemoryStream。但對於序列化器來說,這並不重要。對於DCS來說,它只是一個Stream。

還有一件事,如果您有一個WCF服務並正在使用Silverlight進行使用(例如,通過使用Add Service Reference - ASR - 爲其創建代理),則無需擔心序列化 - 由ASR嚮導生成的代理將使用內部WCF類爲您處理序列化,您只需調用代理中的方法直接傳遞對象。

相關問題