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
,因此您将获得两个类的数据。