从WCF服务向Silverlight客户端发送任意数据类型的复杂图形的最简单方法是什么? Here提到DataContractSerializer作为WCF的默认序列化引擎。它还说“所有具有没有参数的构造函数的公开可见类型”都可以序列化。这听起来像是可以通过WCF服务发送任意类型。这是真的?不需要DataContracts,XmlElement属性和类似的东西?假设它是真的,客户端存在哪些限制(例如,只有使用(子集).NET框架的客户端)?
此外,如果您能告诉我,与Silverlight客户端的DataContractSerializer.WriteObject(流流,对象图)一起使用的最佳流将是非常好的。
答案 0 :(得分:1)
是的,确实,您不需要使用[DataContract],[Serializable],[Xml ...]来装饰类,让WCF序列化它。您可以发送任意类型,只要它们遵循某种模式(无参数构造函数,仅序列化公共字段/属性)。在http://www.pluralsight-training.net/community/blogs/aaron/archive/2008/05/13/50934.aspx的WCF中有一篇关于POCO(普通旧CLR对象)序列化的好文章。
至于其他客户端的限制,例如Silverlight,如果客户端支持这些类型,那么它也可以正常工作。
对于你的上一个问题,它并不重要(只要你可以写入流)。如果要将对象序列化为文件(在Silverlight独立存储中),您最终可能会使用FileStream
;如果要直接通过网络序列化对象,可以使用HttpWebRequest.EndGetRequestStream
返回的流;如果你想做一些内存操作,你可以使用MemoryStream。但它对于序列化器来说无关紧要。对于DCS,它只是一个流。
还有一件事,如果你有一个WCF服务并且正在使用Silverlight(例如,通过使用添加服务引用 - ASR来为它创建代理),那么你不需要担心序列化 - ASR向导生成的代理将使用内部WCF类来为您处理序列化,您需要做的就是调用代理中的方法直接传递对象。