Сохранение ArrayList пользовательских объектов в пользовательских настройках

Можно ли сохранить ArrayList пользовательских объектов в пользовательских настройках приложения, не прибегая к пользовательской сериализации?

Например, для базового класса данных, содержащего только общедоступные свойства get/set и закрытые резервные поля:

[Serializable]
class SimpleClass()
{
  ...   
}

Когда я запускаю следующий код, а затем перезапускаю приложение, параметр ArrayList с именем MyList всегда имеет значение null, т. е. он не сохраняется.

if (Properties.Settings.Default.MyList==null)
{
    Properties.Settings.Default.MyList=new ArrayList();
}

Properties.Settings.Default.MyList.Add(new SimpleClass(DateTime.Now.ToString()));

Properties.Settings.Default.Save();

Я понимаю, что ArrayList не типизирован, т.е. он содержит коллекцию объектов. Однако просто использовать GetType() для каждого объекта, чтобы определить фактический тип. Это должно разрешить сериализацию, не так ли?

Я также знаю, как обойти это, выполнив некоторую пользовательскую сериализацию. Это просто боль, похоже, это не работает, поскольку это было бы наиболее удобно для более простых ситуаций.

Любые идеи?


person Ash    schedule 18.02.2009    source источник


Ответы (1)


Если вы используете сериализацию XML, вы можете использовать атрибут XmlArrayItem.

 [XmlArray("Items")]
 [XmlArrayItem("A.Thing",typeof(Thing))]
 [XmlArrayItem("A.Different.Thing",typeof(Whatzit))]
 public System.Collections.ArrayList List;

Это требует, чтобы вы знали различные типы, которые могут присутствовать в ArrayList во время компиляции.

person Cheeso    schedule 28.03.2009