Silverlight 3.0二进制序列化支持?

时间:2009-08-17 19:29:26

标签: serialization silverlight-3.0

我可以使用BinaryFormatter对使用完整.NET 2.0运行时序列化的Silverlight 3.0运行时中的对象进行反序列化吗?我使用以下代码将对象序列化为我们写入数据库表的ByteArray:

        MemoryStream serStream = new MemoryStream();
        BinaryFormatter binFormatter = new BinaryFormatter();
        binFormatter.Serialize(serStream, csMetric);


        serStream.Position = 0;
        return serStream.ToArray();

然后,Silverlight客户端需要从数据库中检索此二进制数据(通过Web服务调用),并将字节取消分解回csMetric类的实例。

这可能吗?如果是这样,如果在SL 3.0运行时中无法使用BinaryFormatter,那么在客户端上如何完成?

谢谢, 乔恩

4 个答案:

答案 0 :(得分:0)

由于您必须通过WCF,以及完整的.NET Framework,无论如何都要将数据导入Silverlight,我建议在将服务器上的对象反序列化之后再将其发送回Silverlight。 Silverlight 3 WCF堆栈支持二进制WCF编码,这应该使数据传输合理有效。

答案 1 :(得分:0)

乔,

您是否尝试使用DataContractSerializer反序列化对象?我没有测试过这个确切的场景,但这就是我接近它的方式:

以下是字节数组(byte [])的扩展方法:

pubilc static T Deserialize<T>(this byte[] yourSerializedByteArray)
{
T deserializedObject;

DataContractSerializer serializer = new DataContractSerializer(typeof(T));
using(MemoryStream ms = new MemoryStream(yourSerializedByteArray))
{
  deserializedObject = (T)serializer.ReadObject(ms);
}

return deserializedObject;
}

答案 2 :(得分:0)

DataContractSerializer有一大堆问题,我已经创建了一个二进制序列化器来删除其中的一些(至少对我而言!)它使用反射并生成可以发送到WCF服务的合理紧凑的表示。

更多信息here

答案 3 :(得分:0)

也许有人想尝试我的SharpSerializer。它可以将数据序列化为二进制和xml格式。它适用于.NET Full,Compact和Silverlight。