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

发布于 2024-12-09 14:52:28 字数 424 浏览 0 评论 0原文

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

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

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

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

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

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

I thought I had read somewhere that Silverlight 4 was going to contain a BinaryFormatter to support serializing/deserializing binary data in the client application but I can't seem to locate it, so I'm guessing it's not there.

I have an existing service I need to access from my Silverlight 4 application. The service uses sockets over TCP. I've been able to get the client app connected and am able to receive messages from the service but I cannot deserialize the content of the message.

The message consists of the following object serialized on the server:

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

I do not have control over the service and changing the format, protocol, etc. is not an option. (Also, fwiw, Name is variable length.)

How can I reconstitute the Message object in my Silverlight client?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

计㈡愣 2024-12-16 14:52:28

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

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

I wouldn't even attempt to write binary deserialiser for Silverlight (I'm not even convinced its possible).

Instead (assuming a ASP.NET host site) I would place a WCF Service in the host site act as a kind of proxy. The WCF service will make requests to your service on behalf of the silverlight app.

长途伴 2024-12-16 14:52:28

您是否在寻找 BinaryReader?

Are you looking for BinaryReader?

月竹挽风 2024-12-16 14:52:28

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

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

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

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

So, after much trial and error, I ended finding the following solution to my problem.

First, I was able to get access to the server code which allowed me to change the Message class so instead of the Data property returning a Stream, it returns a Byte array. I then use the XmlSerializer to serialize the object to the outgoing NetworkStream. Apparently the XmlSerializer will use Base64 encoding by default and convert the byte array to a string which can be included in the XML stream.

In the Silverlight client, I use the XmlSerializer to deserialize the byte array into the client-side object.

Not exactly the same as binary serialization, but the ultimate goal was to deserialize the binary data (byte array) received from the Socket on the SL client and this gets me there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文