Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Silverlight 4中反序列化二进制数据_Silverlight_Serialization_Silverlight 4.0_Deserialization_Binary Deserialization - Fatal编程技术网

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

在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

我想我在什么地方读到过Silverlight 4将包含一个BinaryFormatter来支持在客户端应用程序中序列化/反序列化二进制数据,但我似乎找不到它,所以我猜它不在那里

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

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

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中。