У меня странная проблема, которую я не могу понять. У меня есть класс пользовательских настроек, который наследует ApplicationSettingsBase. Он имеет пользовательские настройки, как показано ниже.
/// <summary>
/// The Last Active Account
/// </summary>
[UserScopedSettingAttribute()]
public AccountKeyClass ActiveAccount
{
get
{
try
{
return (AccountKeyClass)this["ActiveAccount"];
}
catch(Exception error){}
return null;
}
set
{
this["ActiveAccount"] = value;
if (!this.AccountList.Contains(value))
{
//this.AccountList.Add(value);
}
}
}
/// <summary>
/// Account List
/// Key: UserID
/// Value: AccountKeyClass
/// </summary>
[UserScopedSettingAttribute()]
public List<AccountKeyClass> AccountList
{
get
{
try
{
if(this["AccountList"] != null)
return (List<AccountKeyClass>)this["AccountList"];
}
catch(Exception error){}
return null;
}
set { this["AccountList"] = value; }
}
У меня есть две формы: Основная форма и Форма настроек, в которой можно изменить настройки приложения. Когда я создаю SettingsForm и меняю значение AccountList Settings, файл user.config изменяется в соответствии с ожиданиями. Моя кнопка «Применить / Ок» для моей SettingsForm вызывает Settings.Save (), затем Settings.Reload (), затем закрывает форму. Проблема в том, что когда вызывается .Reload (), Settings.AccountList становится нулевым.
Более того, файл user.config никогда не меняется, если я закрываю приложение и открываю заново, файл user.config по-прежнему правильный, но файл Settings.AccountList никогда не читается.
Параметр Settings.AccountList считывается, если я никогда не вызываю .Reload ().
Обновление:
Если я создам Список и Сохранить (); из моей MainForm, то AccountList будет читаться из моего user.config нормально. Однако, если я добавлю в AccountList свою вторичную форму (SettingsForm) и вызову Save (), то при следующем запуске приложения настройки не будут считаны, и вместо него будет возвращено нулевое значение. Это происходит, даже если я не использую Reload ().
Я думаю, что проблема связана с использованием универсального списка <>. Сохраняемый AccountKeyClass сохраняется в виде сериализованного XML.