1

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

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

该消息由在服务器上序列化的以下对象组成:

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

我无法控制服务,并且无法更改格式、协议等。(另外,fwiw,名称是可变长度的。)

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

4

3 回答 3

2

我什至不会尝试为 Silverlight 编写二进制反序列化器(我什至不相信它是可能的)。

相反(假设是一个 ASP.NET 主机站点)我会在主机站点中放置一个 WCF 服务作为一种代理。WCF 服务将代表 silverlight 应用程序向您的服务发出请求。

于 2011-10-12T16:29:24.140 回答
0

因此,经过多次试验和错误,我最终找到了以下问题的解决方案。

首先,我能够访问允许我更改 Message 类的服务器代码,因此它不是返回一个 Stream 的 Data 属性,而是返回一个 Byte 数组。然后我使用 XmlSerializer 将对象序列化为传出的 NetworkStream。显然 XmlSerializer 将默认使用 Base64 编码并将字节数组转换为可以包含在 XML 流中的字符串。

在 Silverlight 客户端中,我使用 XmlSerializer 将字节数组反序列化为客户端对象。

与二进制序列化不完全相同,但最终目标是反序列化从 SL 客户端上的 Socket 接收到的二进制数据(字节数组),这让我到了那里。

于 2011-10-21T01:19:08.113 回答
0

您在寻找BinaryReader吗?

于 2011-10-12T19:00:10.460 回答