你可以在没有类型定义的情况下反序列化接口的实例吗?

时间:2015-05-28 20:04:42

标签: c# binaryformatter

假设我有一个接口实例的序列化字节AnInterface,如下所示:

AnInterface instance = new ConcreteClass();
serializeToDatabase(instance);

是否可以执行以下操作:

IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
byte[] bytes = bytesSavedToDB;
stream.Write(bytes, 0, bytes.Length);
stream.Position = 0;
AnInterface instance = (AnInterface) formatter.Deserialize(stream);

没有ConcreteClass的定义?

2 个答案:

答案 0 :(得分:2)

BinaryFormatter将有关类型的信息保存到二进制流中。它使用该信息在反序列化期间重建对象图。因此,您可以在不知道它包含哪个对象的情况下反序列化流。

但是,在反序列化期间,所有已序列化的具体类都应该是可加载的。实际上,这意味着保存它们的程序集应该位于应用程序文件夹,GAC中,或者通过其他方式加载到内存中。

formatter.Deserialize只返回object,您可以将其转换为接口或具体类型。

答案 1 :(得分:-1)

如果不知道类的(真实)类型,则无法反序列化。