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)
您必须将 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)