在Silverlight 4中反序列化二进制数据
我想我在什么地方读到过Silverlight 4将包含一个BinaryFormatter来支持在客户端应用程序中序列化/反序列化二进制数据,但我似乎找不到它,所以我猜它不在那里 我需要从Silverlight 4应用程序访问现有服务。该服务使用TCP上的套接字。我已经能够连接客户端应用程序,并且能够从服务接收消息,但是我无法反序列化消息的内容 该消息由服务器上序列化的以下对象组成:在Silverlight 4中反序列化二进制数据,silverlight,serialization,silverlight-4.0,deserialization,binary-deserialization,Silverlight,Serialization,Silverlight 4.0,Deserialization,Binary Deserialization,我想我在什么地方读到过Silverlight 4将包含一个BinaryFormatter来支持在客户端应用程序中序列化/反序列化二进制数据,但我似乎找不到它,所以我猜它不在那里 我需要从Silverlight 4应用程序访问现有服务。该服务使用TCP上的套接字。我已经能够连接客户端应用程序,并且能够从服务接收消息,但是我无法反序列化消息的内容 该消息由服务器上序列化的以下对象组成: class Message { String Name { get; set; } Stream
class Message
{
String Name { get; set; }
Stream Data { get; set; }
}
我无法控制服务,更改格式、协议等不是选项。(另外,fwiw的名称是可变长度。)
如何在Silverlight客户端中重建消息对象?我甚至不会尝试为Silverlight编写二进制反序列化程序(我甚至不相信这是可能的)
相反(假设是ASP.NET主机站点),我将在主机站点中放置一个WCF服务作为一种代理。WCF服务将代表silverlight应用程序向您的服务发出请求。您正在寻找吗?因此,经过多次尝试和错误,我终于找到了以下解决问题的方法 首先,我能够访问服务器代码,该代码允许我更改消息类,因此它不返回流,而是返回字节数组。然后,我使用XmlSerializer将对象序列化到传出的NetworkStream。显然,XmlSerializer在默认情况下将使用Base64编码,并将字节数组转换为可以包含在XML流中的字符串 在Silverlight客户端中,我使用XmlSerializer将字节数组反序列化到客户端对象中
与二进制序列化不完全相同,但最终目标是对从SL客户端上的套接字接收的二进制数据(字节数组)进行反序列化,这使我达到了目的。它不是ASP.NET主机站点,而是推送模型(服务将消息推送到客户端应用,即无请求)。评论效率高。试着回答我的一个问题,你可能会看到利率上升。我不这么认为。这有助于具体化对象,但前提是您知道二进制数据的确切组成。正如我提到的,它将包含一个可变长度的字符串和一个可变长度的流。服务器上的数据是如何序列化的?据我所知,通过反向工程代码,BinaryFormatter用于将对象序列化为流,然后复制到套接字使用的NetworkStream中。这里的答案并不简单——BinaryFormatter没有将其复制到SL4中。