我可以使用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,那么在客户端上如何完成?
谢谢, 乔恩
答案 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。