在反序列化在MySQL数据库中存储为BLOB的多个对象时遇到问题。
每个对象类都有自己的反序列化函数。
Class1 c1Holder = (Class1)binFormatter.Deserialize(memStream);
工作正常,但随后......
Class2 c2Holder = (Class2)binFormatter.Deserialize(memStream);
...调用Class1反序列化函数。当我使用VS 2010调试器逐步执行它时,它将在第二次尝试时调用正确的函数。 也...
Class3 c3Holder = (Class3)binFormatter.Deserialize(memStream);
...调用Class1反序列化函数,然后调用Class2函数,最后调用正确的函数。
有什么想法吗?
答案 0 :(得分:1)
来自评论:
无法将'Assembly.Class1'类型的对象转换为'Assembly.Class4'类型。
无法将'Assembly.Class2'类型的对象转换为'Assembly.Class4'类型。
无法将'Assembly.Class3'类型的对象转换为'Assembly.Class4'类型。
这表明您只是期望数据与实际不同。 BinaryFormatter的观点是,如果序列化Class7,那么它将反序列化为class7。对于其他序列化程序,您经常需要告诉它将其反序列化为什么,允许不同类型可以互换,只要它们看起来相似。
所以使用BinaryFormatter:如果你想得到一个Class2,序列化一个Class2。
要明确,以下内容:
Class2 c2Holder = (Class2)binFormatter.Deserialize(memStream);
不说“将其反序列化为Class2” - 它更像是:
object tmp = binFormatter.Deserialize(memStream);
Class2 c2Holder = (Class2)tmp;
即。 “将其序列化为任何形式,然后将其转换为Class2”。如果不是 Class2,它将失败。这不是转换等 - 只是一种类型检查。
如果您想要使用类似但不同类型的序列化建议,请告诉我。