C# 序列化Arraylist的Arraylist

C# 序列化Arraylist的Arraylist,c#,.net,serialization,arraylist,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("te

我的应用程序中有一个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);
}
但是我想知道如何序列化列索引呢


提前感谢您的帮助

创建一个带有名称和索引的公共类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);
}

更新我个人使用XMLFormatter,例如,我从问题中复制了源示例。感谢您abstishchev创建一个带有名称和索引的公共类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);
}

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

有两件事需要事先注意:

  • 由于您没有创建soap消息,我建议使用
    BinarySerializer
    XmlSerializer
    进行特殊序列化
  • 您肯定更喜欢强类型的
    列表
    而不是非类型的
    数组列表
话虽如此,我还是建议不要完全序列化——它对于您来说太重了,而且对于对象的长期存储或传输来说也不是一个很好的方法(例如,假设您在应用程序的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);
}
使用(FileStream file=newfilestream(“test.xml”,FileMode.Create))
{   
变量列名=
dataGridView1.Columns
.Cast()
.OrderBy(x=>x.ColumnIndex)
.选择(x=>x.Name);
foreach(columnNames中的字符串列)
file.WriteLine(列);
}

首先要注意两件事:

  • 由于您没有创建soap消息,我建议使用
    BinarySerializer
    XmlSerializer
    进行特殊序列化
  • 您肯定更喜欢强类型的
    列表
    而不是非类型的
    数组列表
话虽如此,我还是建议不要完全序列化——它对于您来说太重了,而且对于对象的长期存储或传输来说也不是一个很好的方法(例如,假设您在应用程序的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);
}
使用(FileStream file=newfilestream(“test.xml”,FileMode.Create))
{   
变量列名=
dataGridView1.Columns
.Cast()
.OrderBy(x=>x.ColumnIndex)
.选择(x=>x.Name);
foreach(columnNames中的字符串列)
file.WriteLine(列);
}

@Gopalakrishnan Subramani-如果不进行反序列化,那么如何反序列化该列的列名和索引呢。你知道吗?你为什么用SoapFormatter来代替
XmlFormatter
?老实说,我不知道SoapFormatter。。因为OP已经知道如何将序列化与SoapFormatter一起使用,所以我使用了相同的示例。@abatishchev-不知道为什么。在我的情况下,哪一个更好?@Erika:我建议对XML输出使用XmlFormatter,对XML输出使用BinaryFormatterbinary@GopalakrishnanSubramani-如果没有反序列化,那么如何反序列化该列的列名和索引呢。你知道吗?你为什么用SoapFormatter来代替
XmlFormatter
?老实说,我不知道SoapFormatter。。因为OP已经知道如何将序列化与SoapFormatter一起使用,所以我使用了相同的示例。@abatishchev-不知道为什么。在我的情况下,哪一个更好?@Erika:我建议使用XmlFormatter进行XML输出,使用BinaryFormatter进行二进制输出。您使用SoapFormatter进行XML序列化,而不是使用
XmlFormatter
?您使用的是.NET的哪个版本?如果您使用的是.NET 2.0或更高版本,那么您根本不应该使用ArrayList。@John Saunders-我使用的是3.5。您使用SoapFormatter进行XML序列化,而不是使用
XmlFormatter
?您使用的是.NET的哪个版本?如果您使用的是.NET2.0或更高版本,则根本不应该使用ArrayList。@John Saunders-Iam使用的是3.5。