序列化ArrayList的Arraylist

时间:2011-05-31 17:53:34

标签: c# .net serialization arraylist

我的应用程序中有一个DatagridView。我想将gridview列序列化为XML文件。仅序列化列名称很容易,但我也希望序列化列索引。

序列化列我会这样做:

ArrayList array = new ArrayList();
foreach(DataGridViewColumn column in datagridView1.Columns)
{
    array.Add(column.Name)
}

using (FileStream file = new FileStream("test.xml", FileMode.Create))
{
     SoapFormatter formatter = new SoapFormatter();
     formatter.Serialize(file, array);
}

但我想知道如何序列化列索引呢?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

使用Name和Index创建一个公共类ColumnInfo,您可以将其存储到可以进行分类的数组列表中。

[Serializable]
public class ColumnInfo
{
    public string Name;
    public int Index;       
}

ArrayList array = new ArrayList();
foreach(DataGridViewColumn column in datagridView1.Columns)
{
    ColumnInfo ci = new ColumnInfo();
    ci.Name = column.Name;
    //ci.Index = column.Index; //decide how to get column index
    array.Add(ci);
}

using (FileStream file = new FileStream("test.xml", FileMode.Create))
{
     SoapFormatter formatter = new SoapFormatter();
     formatter.Serialize(file, array);
}

更新我个人使用XmlFormater,例如我从问题中复制了源样本。谢谢abstishchev

答案 1 :(得分:2)

前面需要注意两件事:

  • 由于您没有创建soap消息,我建议BinarySerializerXmlSerializer进行临时序列化。
  • 您绝对应该选择强类型List<string>而不是无类型ArrayList

话虽如此,我建议反对完全序列化 - 它对你的目的而言太重了,它不是一个很好的方法来长期存储或转移对象(例如,让我们说你在你的应用程序的v1.0中序列化一个类,然后在v2.0中反序列化它,可能会发生各种各样的怪异。)

我建议使用以下方法:按索引对列进行排序,然后逐行将它们写入您的文件。您的列将在您的文件中正确订购:

using(FileStream file = new FileStream("test.xml", FileMode.Create))
{   
    var columnNames =
        dataGridView1.Columns
        .Cast<DataGridViewColumn>()
        .OrderBy(x => x.ColumnIndex)
        .Select(x => x.Name);

    foreach(string column in columnNames)
        file.WriteLine(column);
}