gpt4 book ai didi

C#反序列化未知抽象类

转载 作者:行者123 更新时间:2023-11-30 21:25:19 26 4
gpt4 key购买 nike

我只熟悉序列化的基础知识,现在我可以使用它了。我有一个现有的报告系统,其中包含 ReportBase 抽象类和从基类派生的多个报告。这些每个都有在构造函数中指定的不同报告参数,偶尔还有额外的方法。是否可以序列化任何派生类,然后在不知道派生类类型的情况下反序列化。

或者,我可以通过反射(reflection)做一些事情来实现它。我可能会将序列化对象存储到数据库中,因此可以将报告类添加到我想的另一个字段中。

最佳答案

是的,在不知道对象的实际类型的情况下当然可能反序列化。事实上,您不需要知道任何关于类型的信息就可以反序列化。在二进制意义上,反序列化只是将字节数组转换为原始类型并将引用作为对象返回。之后您可以随意将其转换为实例的任何合法类型。

例如,下面的代码会将流反序列化为对象,并将引用转换为 ReportBase 类型。

public static void Deserialize(Stream stream)
{
BinaryFormatter formatter = new BinaryFormatter();
object obj = formatter.Deserialize(stream);
ReportBase report= (ReportBase) obj;
}

注意上面我说的是可能的。为了使其工作,流必须指向 ReportBase 派生类的有效序列化实例,并且该类必须符合序列化规则。

很容易创建一个旨在成为但不可序列化的类:http://blogs.msdn.com/jaredpar/archive/2009/03/31/is-it-serializable.aspx

关于C#反序列化未知抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/712393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com