如何将派生类序列化为其基类

Chr*_*ing 6 .net serialization

我有一个派生类,只向基类添加方法.如何序列化派生类以使其与基类的序列化相匹配?即派生类的序列化xml应如下所示:

<BaseClass>
  ...
</BaseClass>
Run Code Online (Sandbox Code Playgroud)

例如,以下内容将抛出InvalidOperationException"未预期类型DerivedClass.使用XmlInclude或SoapInclude属性指定静态未知的类型."

Class BaseClass {}

Class DerivedClass : BaseClass {}

DerivedClass derived = new DerivedClass();

StreamWriter stream = new StreamWriter("output file path");
XmlSerializer serializer = new XmlSerializer(GetType(BaseClass));
serializer(stream, derived);
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 4

您必须将 GetType(DerivedClass) 传递给序列化器构造函数,它必须与您序列化的对象的类型匹配。您可以使用该<XmlRoot>属性重命名为根元素。此示例代码按预期工作:

using System;
using System.Xml.Serialization;
using System.IO;

class Program {
  static void Main(string[] args) {
    var obj = new DerivedClass();
    obj.Prop = 42;
    var xs = new XmlSerializer(typeof(DerivedClass));
    var sw = new StringWriter();
    xs.Serialize(sw, obj);
    Console.WriteLine(sw.ToString());

    var sr = new StringReader(sw.ToString());
    var obj2 = (BaseClass)xs.Deserialize(sr);
    Console.ReadLine();
  }
}

public class BaseClass {
  public int Prop { get; set; }
}
[XmlRoot("BaseClass")]
public class DerivedClass : BaseClass { }
Run Code Online (Sandbox Code Playgroud)