具有继承类型的列表的序列化

时间:2011-04-05 21:07:14

标签: c# serialization inheritance

我正在使用C#中的序列化,我遇到了一个我似乎无法找到答案的问题。所以我有一个可序列化的类,其中包含另一个可序列化类的列表作为属性。我需要列表中的一个项目具有不同的属性,所以我创建了一个子类并像以前一样将它添加到列表中。那是在弹出序列化问题的时候,我只能想象列表不能用继承的类序列化,但为什么呢?如何达到类似的目的?无论如何,这是我想要完成的一个例子:

[Serializable]
public class aList
{
    [XmlElement]public List<b> list = new List<b>();

    public aList()
    {
        list.Add(new b());
        list.Add(new b());
        list.Add(new c());
    }
}

[Serializable]
public class b
{
    [XmlElement]public int prop1;
    [XmlElement]public string prop2;

    public b()
    {
        prop1 = 0;
        prop2 = String.Empty;
    }
}

[Serializable]
public class c : b
{
    [XmlElement]public bool prop3;

    public c() : base()
    {
        prop3 = false;
    }
}

2 个答案:

答案 0 :(得分:4)

XmlInclude属性。他们有点......笨拙。基本上,您为类提供属性,为序列化程序提供有关继承的提示。

具体做法是:

[Serializable]
[XmlInclude(typeof(c))]
public class b
{
    [XmlElement]
    public int prop1;

    [XmlElement]
    public string prop2;

    public b()
    {
        prop1 = 0;
        prop2 = String.Empty;
    }
}

答案 1 :(得分:-2)

可以尝试使用数组而不是列表。如果数组所保持的元素是可序列化的,则该数组是可序列化的。