序列化一系列列表

时间:2014-09-08 15:45:35

标签: c# list xmlserializer

所以,我有这个清单:

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文件时,程序在上面一行崩溃。

错误讯息:

  

对象引用未设置为对象的实例

屏幕截图:http://i.imgur.com/PSWIVRD.png

2 个答案:

答案 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);

对数据存储方式的轻微重组使事情变得更加容易。希望这会有所帮助。