Serialization Silverlight 3.0二进制序列化支持?

Serialization Silverlight 3.0二进制序列化支持?,serialization,silverlight-3.0,Serialization,Silverlight 3.0,我是否可以在Silverlight 3.0运行时中反序列化使用BinaryFormatter使用完整的.NET 2.0运行时序列化的对象?我使用以下代码将对象序列化为ByteArray,并将其写入DB表: MemoryStream serStream = new MemoryStream(); BinaryFormatter binFormatter = new BinaryFormatter(); binFormatter.Serialize(s

我是否可以在Silverlight 3.0运行时中反序列化使用BinaryFormatter使用完整的.NET 2.0运行时序列化的对象?我使用以下代码将对象序列化为ByteArray,并将其写入DB表:

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


        serStream.Position = 0;
        return serStream.ToArray();
然后,Silverlight客户端需要从DB中检索该二进制数据(通过Web服务调用),并将字节反序列化回csMetric类的实例中

这可能吗?如果是这样,那么在SL3.0运行时二进制格式化程序不可用的情况下,如何在客户机上实现这一点

谢谢,
jon

由于您必须通过WCF,从而通过完整的.NET Framework才能将数据导入Silverlight,因此我建议在将对象发送回Silverlight之前,先在服务器上反序列化该对象。Silverlight 3 WCF堆栈支持二进制WCF编码,这将使数据传输合理高效。

Jon

您是否尝试使用DataContractSerializer反序列化对象?我没有测试过这个确切的场景,但我会这样做:

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

publilc static T反序列化(此字节[]yourSerializedByteArray)
{
T反序列化对象;
DataContractSerializer serializer=新的DataContractSerializer(typeof(T));
使用(MemoryStream ms=新的MemoryStream(yourSerializedByteArray))
{
反序列化对象=(T)serializer.ReadObject(ms);
}
返回反序列化对象;
}

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


更多信息。

也许有人想试试我的。它可以将数据序列化为二进制和xml格式。它在.NET完整、紧凑和Silverlight上工作。

谢谢James…这就是我们目前正在做的,但它确实涉及到WCF服务上的额外序列化/反序列化跃点。我们希望通过让WCF服务简单地返回数据库中的字节并直接发送到SL客户端来避免这种情况……只是不确定SL运行时是否可以。看起来不错。糟糕的是,你来这里只是为了宣传它;(
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;
}