Сериализация Arraylist ArrayList - PullRequest
1 голос
/ 31 мая 2011

В моем приложении есть 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 ]

2 голосов
/ 31 мая 2011

Две вещи, на которые стоит обратить внимание:

  • Поскольку вы не создаете мыльное сообщение, я бы порекомендовал BinarySerializer или XmlSerializer для специальной сериализации.
  • Вы определенно должны предпочесть строго типизированный 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);
}
2 голосов
/ 31 мая 2011

Создайте открытый класс 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, например, скопировал исходный образец из вопроса. Спасибо, абстищев

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...