假设我们有一个母亲类,以及两个继承自母亲的类Son1和Son2。 Son2也具有类型Mother的属性。 这三个类都是可序列化的,并且位于相同的名称空间中。
问题是在Son2上序列化失败。
我已经查看了文档,并且由于Mother可序列化,因此Son2也应该是可序列化的。
[Serializable]
[XmlInclude(typeof(Son1))]
[XmlInclude(typeof(Son2))]
public class Mother
{
[XmlAttribute("id")]
public string id = "Mother";
public Mother() { }
}
[Serializable]
public class Son1 : Mother
{
[XmlAttribute("son1Int")]
public int a = 5;
public Son1() : base()
{
id = "Son1";
}
}
[Serializable]
public class Son2 : Mother
{
[XmlAttribute("son2Int")]
public int a = 5;
[XmlAttribute("dynamicMother")]
public Mother mother;
public Son2() : base()
{
id = "Son2";
}
}
我正在使用XmlSerializer来序列化所有三个类。
它在Mother和Son1上按预期工作,而在Mother类上没有“ [XmlInclude(typeof(Son2))]]”。一旦添加了Son2序列化所需的这一行,即使在Mother和Son1上,序列化也会系统地失败。
有办法使它工作吗?
[编辑]
在Son2上使用DataContact解决了该问题。
[DataContract(IsReference = true)]
public class Son2 : Mother1
{
[XmlAttribute]
public int a = 5;
[DataMember]
public Mother1 mother = new Mother1();
public Son2() : base()
{
id = "Son2";
}
}