我现在正在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;
}
}
可以尝试使用数组而不是列表。如果数组中包含的元素是可序列化的,那么这个数组就是可序列化的。