假设我用BinaryFormatter
. 不引用此库的程序集尝试反序列化字节。它会起作用吗?
我不希望它被转换为正确的类型,我只想将它作为一个object
实例检索,以便我可以对它进行分组并再次序列化它。
假设我用BinaryFormatter
. 不引用此库的程序集尝试反序列化字节。它会起作用吗?
我不希望它被转换为正确的类型,我只想将它作为一个object
实例检索,以便我可以对它进行分组并再次序列化它。
这应该可以正常工作,但前提是该库与应用程序一起部署。您不需要直接引用它。
在序列化期间,BinaryFormatter
存储完整的程序集名称(显示名称、公钥令牌、版本号)以及类型信息。对于反序列化器来说,这是足够的信息来再次加载该程序集。请注意,不存储路径信息,因此需要在执行反序列化的应用程序中部署程序集。
不; 如果类型本身没有被引用(以某种方式被一些加载的程序集),那么它就不能被实例化。即使您不需要(或不想)以强类型的方式引用实例,对象本身仍然必须是该类型的实例。
如果程序集可用(并且可发现),那么它将被加载,但从严格意义上讲no,您将无法从完全未引用的程序集中反序列化类型。
如果您只是尝试临时获取序列化信息以便对其进行分组,您可以从序列化流中读取原始字节并将它们分组吗?也许进入一个List<byte[]>
实例?这假设最终目的地可以对每个字节数组表示的信息做出一些假设。
不,它不起作用,为了反序列化对象,您需要引用定义对象的程序集。
是的,如果您创建一个序列化绑定器,您可以将类型反序列化为不同的类型。但是如果没有定义,您将无法实例化原始类型的实例(您需要手头有程序集)