IFormatter可以反序列化未引用类型的对象吗?

时间:2009-12-10 19:06:05

标签: .net serialization binaryformatter

Supose我使用BinaryFormatter序列化了第三方库类型对象。不引用此库的程序会尝试反序列化字节。它会起作用吗?

我不希望它被转换为正确的类型,我只想将其作为object实例检索,以便我可以将其分组并再次序列化。

5 个答案:

答案 0 :(得分:2)

这应该可以正常工作,但前提是该库与应用程序一起部署。您不需要直接引用它。

在序列化期间,BinaryFormatter存储完整的程序集名称(显示名称,公钥标记,版本号)以及类型信息。这足以让解串器关闭并再次加载该组件。请注意,未存储路径信息,因此需要在执行反序列化的应用程序中部署程序集。

答案 1 :(得分:1)

没有;如果未引用类型本身(以某种方式由某些已加载的程序集引用),则无法实例化它。即使您不需要(或想要)以强类型方式引用实例,对象本身仍必须是该类型的实例。

如果程序集可用(并且可被发现),那么它将被加载,但严格来说 no ,您将无法从完全未引用的程序集中反序列化类型。< / p>

答案 2 :(得分:1)

如果您只是想暂时获取序列化信息以便对其进行分组,那么您是否可以从序列化流中读取原始字节并对它们进行分组?也许进入List<byte[]>实例?这假设最终目的地可以对每个字节数组所代表的信息做出一些假设。

答案 3 :(得分:0)

不,它不起作用,以反序列化您需要引用定义对象的程序集的对象。

答案 4 :(得分:0)

是的,如果您创建序列化活页夹,则可以将类型反序列化为其他类型。但是如果没有它的定义(你需要手头有程序集),你将无法实例化原始类型的实例。