我以为我曾在某处读过Silverlight 4将包含一个BinaryFormatter以支持在客户端应用程序中序列化/反序列化二进制数据,但我似乎找不到它,所以我猜它不存在。
我需要从Silverlight 4应用程序访问现有服务。该服务使用TCP上的套接字。我已经能够连接客户端应用程序,并且能够从服务接收消息,但我无法反序列化消息的内容。
该消息包含服务器上序列化的以下对象:
class Message
{
String Name { get; set; }
Stream Data { get; set; }
}
我无法控制服务,更改格式,协议等不是一种选择。 (另外,fwiw,Name是可变长度。)
如何在Silverlight客户端中重建Message对象?
答案 0 :(得分:2)
我甚至不会尝试为Silverlight编写二进制反序列化器(我甚至不相信它可能)。
相反(假设一个ASP.NET主机站点)我会在主机站点中放置一个WCF服务作为一种代理。 WCF服务将代表silverlight应用程序向您的服务发出请求。
答案 1 :(得分:0)
您在寻找BinaryReader吗?
答案 2 :(得分:0)
所以,经过多次试验和错误,我找到了解决问题的方法。
首先,我能够访问允许我更改Message类的服务器代码,而不是返回Stream的Data属性,它返回一个Byte数组。然后,我使用XmlSerializer将对象序列化为传出的NetworkStream。显然,XmlSerializer默认使用Base64编码,并将字节数组转换为可包含在XML流中的字符串。
在Silverlight客户端中,我使用XmlSerializer将字节数组反序列化为客户端对象。
与二进制序列化不完全相同,但最终目标是反序列化从SL客户端上的Socket接收的二进制数据(字节数组),这样我就可以了。