我有一个接口,定义了与接口类型相同的属性。
public interface IMyInterface
{
IMyInterface parent
{
get;
set;
}
}
现在,如果我声明一个类并从接口继承,我需要创建一个名为parent的属性。我希望我的类可以序列化以在Web服务中使用,但是当使用这种方式时,接口不可序列化,那么我应该如何处理我的IMyInterface类型的属性?我确实希望该属性序列化。
答案 0 :(得分:1)
有趣的是:当你用一个抽象类替换接口声明时,它可以工作。 ..甚至列表。
(嗯,实际上这不好笑......)
public class Root
{
[XmlElementAttribute("ClassA", typeof(ClassA))]
[XmlElementAttribute("ClassB", typeof(ClassB))]
[XmlElementAttribute("ClassC", typeof(ClassC))]
public List<IMyInterface> Items { get; set; }
}
public abstract class IMyInterface
{
IMyInterface Parent { get; set; }
string Name { get; set; }
}
答案 1 :(得分:0)
未经测试:当您使用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;
}
}
未经测试 - 我不知道这是否也适用于接口。
编辑:我用这段代码测试了这个问题。它没用。我认为,XmlElement与“object”类型的属性相同。
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 of 键入TestXMLSerializer.IMyInterface 因为它是一个界面。“