所以,我有这个清单:
List<PointF>[] VOIGraphics = new List<PointF>[Globals.MaxVOIS + 1];
for (int i = 0; i < VOIGraphics.Length; i++)
{
VOIGraphics[i] = new List<PointF>();
}
我想将此列表保存为.xml文件。这是代码:
serializer = new XmlSerializer(typeof(List<PointF>[]));
程序编译正常,但是当我将列表保存到.xml文件时,程序在上面一行崩溃。
错误讯息:
对象引用未设置为对象的实例
答案 0 :(得分:0)
Well List []不是一个实例,而是对第一个实例的引用,因此是一个错误。您将需要遍历您拥有的列表数组并获取每个第i个列表的类型,或者您可以使用所有列表的第一个元素的类型,因为它不会更改。下面是我重写代码以便编译和运行的方法。但是生成的XML并不是我想要的,因为反序列化可能是一个问题。但如果您遵循这条路线,那将是下一个问题:)
TextWriter textWriter = new StreamWriter(@"Serialized.xml");
XmlSerializer serializer = new XmlSerializer(_pointList[0].GetType());
for (int i = 0; i < ListSize; i++)
{
serializer.Serialize(textWriter, _pointList[i]);
}
答案 1 :(得分:0)
当序列化列表数组时,无法反序列化(至少我不知道某种方式)。所以我修改了一些数据结构:
public class MyPointList
{
public List<PointF> _listOfPoints;
}
确保该成员是公共的或提供公共GET和SET属性。这是串行器和解串器所需要的。
然后添加另一个列表来保存这个点列表 - public IList _listOfList。
这是序列化代码:
TextWriter textWriter = new StreamWriter(@"Serialized.xml");
XmlSerializer serializer = new XmlSerializer(_listOfList.GetType());
serializer.Serialize(textWriter, _listOfList);
这就是解串器:
XmlSerializer serializer = new XmlSerializer(_listOfList.GetType());
//Geting XMl from the file.
TextReader tr = new StreamReader(@"Serialized.xml");
_listOfList = (IList<MyPointList>)serializer.Deserialize(tr);
对数据存储方式的轻微重组使事情变得更加容易。希望这会有所帮助。