在Silverlight 4中反序列化二进制数据

时间:2011-10-12 16:22:31

标签: silverlight serialization silverlight-4.0 deserialization binary-deserialization

我以为我曾在某处读过Silverlight 4将包含一个BinaryFormatter以支持在客户端应用程序中序列化/反序列化二进制数据,但我似乎找不到它,所以我猜它不存在。

我需要从Silverlight 4应用程序访问现有服务。该服务使用TCP上的套接字。我已经能够连接客户端应用程序,并且能够从服务接收消息,但我无法反序列化消息的内容。

该消息包含服务器上序列化的以下对象:

class Message
{
    String Name { get; set; }
    Stream Data { get; set; }
}

我无法控制服务,更改格式,协议等不是一种选择。 (另外,fwiw,Name是可变长度。)

如何在Silverlight客户端中重建Message对象?

3 个答案:

答案 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接收的二进制数据(字节数组),这样我就可以了。