【问题标题】:Silverlight 3.0 Binary Serialization Support?Silverlight 3.0 二进制序列化支持?
【发布时间】:2009-08-17 19:29:26
【问题描述】:

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

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


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

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

这可能吗?如果是这样,鉴于 BinaryFormatter 在 SL 3.0 运行时中不可用,如何在客户端完成?

谢谢, 乔恩

【问题讨论】:

    标签: serialization silverlight-3.0


    【解决方案1】:

    由于您必须通过 WCF 以及完整的 .NET 框架才能将数据导入 Silverlight,因此我建议您先反序列化服务器上​​的对象,然后再将其发送回 Silverlight。 Silverlight 3 WCF 堆栈支持二进制 WCF 编码,这应该使数据传输相当高效。

    【讨论】:

    • 谢谢詹姆斯...这就是我们目前正在做的事情,但它确实涉及 WCF 服务上的额外序列化/反序列化跃点。我们希望通过让 WCF 服务简单地从数据库中返回字节并将它们直接发送到 SL 客户端来避免这种情况……只是不确定 SL 运行时是否可以这样做。
    【解决方案2】:

    乔恩,

    您是否尝试过使用 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;
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 看起来不错。可惜你来这里只是为了宣传它。 ;(
      【解决方案4】:

      DataContractSerializer 有一大堆问题,我创建了一个二进制序列化程序,可以删除其中的一些问题(至少对我来说是这样!)它使用反射并生成可以发送到 WCF 服务的相当紧凑的表示。

      更多信息here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-12
        • 2014-01-04
        • 2010-09-08
        • 1970-01-01
        • 2016-07-27
        相关资源
        最近更新 更多