我正在尝试WorldObject
使用接口将一系列从单个抽象超类派生的子类序列化为 XML IXmlSerializable
。我必须使用这个接口,因为我希望类在反序列化时订阅一些事件。
使用这个答案,我想出了以下代码:
[XmlInclude(typeof(SubType1))
,XmlInclude(typeof(SubType2))] // etc, includes all subtypes
public abstract class WorldObject : IComparable, IXmlSerializable
public void WriteXml(System.Xml.XmlWriter writer)
{
Type[] extraTypes = new Type[8];
// (...) adding types to array here
var worldObjectSerializer = new XmlSerializer(typeof(List<WorldObject>), extraTypes);
}
初始化的最后一行XmlSerializer
会引发运行时错误:System.MissingMethodException:无法创建抽象类“Namespace.WorldObject”。当我尝试使用typeof(WorldObject)
而不是typeof(List<WorldObject>)
.
我还尝试在每个类中将 XMLRoot 设置为相同的值,如此处所示,但错误仍然存在。