2009-12-10 78 views
1

Supose我用BinaryFormatter序列化了第三方库类型对象。未引用此库的组件会尝试反序列化字节。它会起作用吗?IFormatter是否可以取消未引用类型的对象?

我不希望它被强制转换为正确的类型,我只是想找回它作为object实例,这样就可以组并再次对其进行序列化。

回答

2

这应该做工精细,但前提是该库部署与应用。你不需要直接引用它。

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

+0

与downvote是什么?这个信息是错误的吗? – 2009-12-10 19:32:02

+0

两个罗宾逊在同一线程=) – 2009-12-10 19:54:05

1

否;如果类型本身没有被引用(以某种方式由某个加载的程序集引用),那么它不能被实例化。即使您不需要(或想要)以强类型的方式引用实例,对象本身仍然必须是该类型的实例。

如果程序集可用(和发现),那么它将被加载,但在严格意义上没有,你将无法从一个完全未引用的组件反序列化类型。

0

不,它不会工作,为了反序列化您需要引用定义对象的程序集的对象。

1

如果您只是想暂时获得序列信息,以便您可以组它,你能刚刚从序列化流,并将它们组合读取原始字节?也许成为List<byte[]>实例?这假定最终目的地可以对每个字节数组表示的信息做出一些假设。

+0

感谢您的建议 – 2009-12-10 19:52:17

0

是的,如果你创建一个序列化绑定器,你可以反序列化为不同类型的类型。但你不能够实例化的原始类型的实例没有它的定义(到你需要手头上有装配)

相关问题