インターフェイスを使用して、単一の抽象スーパークラスから派生した一連のサブクラス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 を同じ値に設定しようとしましたが、エラーは解決しません。