Непротестировано: при использовании XmlSerialization вы можете попытаться украсить свое свойство атрибутом [XmlElement] для всех известных реализаций.
public interface IMyInterface
{
[XmlElement(Type=typeof(App.Projekt), ElementName="Projekt")]
[XmlElement(Type=typeof(App.Person), ElementName="Person")]
[XmlElement(Type=typeof(App.Task), ElementName="Task")]
IMyInterface parent
{
get;
set;
}
}
Не проверено. Я не знаю, будет ли это работать и на интерфейсах.
EDIT: Я проверил эту проблему с помощью этого кода. Это не сработало. Я думал, что XmlElement будет делать то же самое, что и с Свойством типа «объект».
public interface IMyInterface
{
IMyInterface Parent { get; set; }
string Name { get; set; }
}
public class ClassA : IMyInterface
{
[XmlElement(Type = typeof(ClassA), ElementName = "ClassA")]
[XmlElement(Type = typeof(ClassB), ElementName = "ClassB")]
[XmlElement(Type = typeof(ClassC), ElementName = "ClassC")]
public IMyInterface Parent { get; set; }
public string Name { get; set; }
public string AProperty { get; set; }
}
public class ClassB : IMyInterface
{
[XmlElement(Type = typeof(ClassA), ElementName = "ClassA")]
[XmlElement(Type = typeof(ClassB), ElementName = "ClassB")]
[XmlElement(Type = typeof(ClassC), ElementName = "ClassC")]
public IMyInterface Parent { get; set; }
public string Name { get; set; }
public string BProperty { get; set; }
}
public class ClassC : IMyInterface
{
[XmlElement(Type = typeof(ClassA), ElementName = "ClassA")]
[XmlElement(Type = typeof(ClassB), ElementName = "ClassB")]
[XmlElement(Type = typeof(ClassC), ElementName = "ClassC")]
public IMyInterface Parent { get; set; }
public string Name { get; set; }
public string CProperty { get; set; }
}
Исключение было:
"Невозможно сериализовать член TestXMLSerializer.ClassA.Parent из типа TestXMLSerializer.IMyInterface , потому что это интерфейс."
Не появляется на работе. Я также пробовал использовать атрибут XmlInclude без везения – Jeremy