Есть пользовательский сериализуемый класс:
[Serializable]
public class MyTestClass {
public string a; //открытые поля класса!
public string b;
public MyTestClass() { } //есть конструктор по умолчанию!
public MyTestClass(string a, string b) {
this.a = a;
this.b = b;
}
}
А вот метод, в котором я пытаюсь записать список экземпляров этого класса в настройки.
private void Method() {
ArrayList al = new ArrayList();
MyTestClass mtc = new MyTestClass("a", "b");
al.Add(mtc);
Properties.Settings.Default.al = al;
Properties.Settings.Default.Save();
}
А вот результат (файл user.config):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<AppSettings.Properties.Settings>
<setting name="al" serializeAs="Xml">
<value />
</setting>
</AppSettings.Properties.Settings>
</userSettings>
</configuration>
Как видите, ничего не сохранилось. Почему? Ведь класс MyTestClass вроде бы удовлетворяет всем требованиям сериализации в XML. В чём ошибка?
Для правильной Xml сериализациия переменной типа ArrayList нужно сообщить
какого типа элементы содержатся в этом списке.
Т.е. автоматически сгенерированная перменная используемае в свойстве
Properties.Settings.Default.al
должна была бы быть объявлена как-то так:
[XmlElement(Type=typeof(MyTestClass))]
public ArrayList al
В качестве варианта решения можешь либо руками в сгенерированном классе пометить свойство al как
[SettingsSerializeAs(SettingsSerializeAs.Binary)]
Либо использовать вместо ArrayList какой-нибудь StringCollection.
P.S. По поводу класса MyTestClass... Поля не следует делать открытыми. Public должны быть свойства, но не поля.