我正在使用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;
}
}
答案 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)
可以尝试使用数组而不是列表。如果数组所保持的元素是可序列化的,则该数组是可序列化的。