2010-05-03 1 views
2

По какой-то причине я не могу хранить массив моего класса в настройках. Вот код:Как хранить массив определенного типа в моем файле настроек?

  var newLink = new Link(); 
      Properties.Settings.Default.Links = new ArrayList(); 
      Properties.Settings.Default.Links.Add(newLink); 
      Properties.Settings.Default.Save(); 

В моем Settings.Designer.cs я указал поле, чтобы быть список массива:

[global::System.Configuration.UserScopedSettingAttribute()] 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    public global::System.Collections.ArrayList Links { 
     get { 
      return ((global::System.Collections.ArrayList)(this["Links"])); 
     } 
     set { 
      this["Links"] = value; 
     } 
    } 

По какой-то причине, он не будет сохранять любые данные, даже если класс Link является сериализуемым, и я его протестировал.

+1

«Я не могу показаться» Как вы это видите? Вызывается ли исключение? Является ли список пустым при загрузке? Является ли пустой без перезагрузки? – Foxfire

+0

Список пуст без исключений. Почему-то это не сериализует мои ссылки. –

+0

Являются ли данные, содержащиеся в файле настроек (это файл XML, который вы можете легко проверить)? – Foxfire

ответ

3

Я нашел источник проблемы. Просто использование простого массива не сократит его. Подумав об этом, десериализатор не будет знать, какой тип десериализует элементы массива. Я не видел, что массив требует сильной печати. Дизайнер ведет меня по глупости считаю, что это был простой общий массив:

[global::System.Configuration.UserScopedSettingAttribute()] 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    public List<Link> Links 
    { 
     get { 
      return ((List<Link>)(this["Links"])); 
     } 
     set { 
      this["Links"] = value; 
     } 
    } 

я должен был сделать эти изменения в Settings.Designer.cs и не от дизайнера.

+0

Спасибо, этот ответ просто помог мне получить тонну! – Evan

1

Убедитесь, что ваш класс Link либо правильно сериализуется XML, либо имеет тип typeconverter для строки (что предпочтительнее при использовании файлов application.settings).

Я бы предположил, что что-то в ваших типах не преобразуется в формат XML-сериализации. И ваш user.config показывает, что у него нет ни одного строкового typeconverter.