1

假设我用BinaryFormatter. 不引用此库的程序集尝试反序列化字节。它会起作用吗?

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

4

5 回答 5

2

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

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

于 2009-12-10T19:08:56.897 回答
1

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

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

于 2009-12-10T19:08:32.077 回答
1

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

于 2009-12-10T19:14:42.137 回答
0

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

于 2009-12-10T19:08:46.333 回答
0

是的,如果您创建一个序列化绑定器,您可以将类型反序列化为不同的类型。但是如果没有定义,您将无法实例化原始类型的实例(您需要手头有程序集)

于 2009-12-14T16:10:44.307 回答