C# 从父函数序列化子类
我有很多对象,我想在以后序列化并读取到对象的实例中。但是,如果我尝试编写这样的保存函数:C# 从父函数序列化子类,c#,inheritance,serialization,C#,Inheritance,Serialization,我有很多对象,我想在以后序列化并读取到对象的实例中。但是,如果我尝试编写这样的保存函数: [serializable] public class ClassA { public int a; public string b; ... public String Save() { return XmlSerialized.Serialize(this); } } [serializable] Class ClassB: ClassA { **** bool
[serializable]
public class ClassA
{
public int a;
public string b;
...
public String Save()
{
return XmlSerialized.Serialize(this);
}
}
[serializable]
Class ClassB: ClassA
{
****
bool C;
}
以下代码仅返回类A的对象:
ClassA objA = new ClassB();
string s = objA.Save();
如何解决此问题?使用
ClassA objA=new ClassB()代码>不起作用。NET将看到结果类型是ClassA
,它知道ClassB
继承自ClassA
。因此,它将只创建ClassA
的一个实例 您调用了classA的Save方法,这就是为什么this
是classA的一个实例
ClassB objB = new ClassB();
string s = objB.Save();
你应该会得到想要的结果
(虽然我不太确定您是否需要在ClassB中重载Save()。首先,您需要将boolc
公开,以便序列化它。
接下来,启动一个新的XmlSerializer
,类型为this
,并使用它序列化:
public string Save()
{
XmlSerializer serializer = new XmlSerializer(this.GetType());
using(StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, this);
return writer.ToString();
}
}
然后你可以像第一次那样称呼它:
ClassA objA = new ClassB();
string s = objA.Save();
谢谢这是我将使用的一个解决方案,但它使我的代码没有结构化和困难:(不。当然,所有代码都是公共的。但是在Save function XMLSerializer中,将其视为ClassA并仅存储ClassA的数据,此对象实际上是ClassB
,此.GetType()的一个实例)
将返回ClassB
,因此您将获得两个类的数据。