如何序列化包含自身实例的类?

时间:2019-04-15 13:07:46

标签: c# xml-serialization

假设我们有一个母亲类,以及两个继承自母亲的类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";
        }
    }

0 个答案:

没有答案