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

本文关键字:列表 序列化 类型 继承 | 更新日期: 2023-09-27 17:48:59

我现在正在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;
    }
}

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

XmlInclude属性。他们有点…邋遢。基本上,你给你的类赋予属性,这些属性给序列化器关于你的继承的提示。

专:

[Serializable]
[XmlInclude(typeof(c))]
public class b
{
    [XmlElement]
    public int prop1;
    [XmlElement]
    public string prop2;
    public b()
    {
        prop1 = 0;
        prop2 = String.Empty;
    }
}

可以尝试使用数组而不是列表。如果数组中包含的元素是可序列化的,那么这个数组就是可序列化的。