Как сохранить ArrayList экземпляров пользовательского класса
От: Mak_71_rus Россия  
Дата: 11.08.11 06:12
Оценка:
Есть пользовательский сериализуемый класс:


[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. В чём ошибка?
Re: Как сохранить ArrayList экземпляров пользовательского кл
От: Spinifex Россия https://architecture-cleaning.ru/
Дата: 11.08.11 09:35
Оценка:
Для правильной Xml сериализациия переменной типа ArrayList нужно сообщить
какого типа элементы содержатся в этом списке.
Т.е. автоматически сгенерированная перменная используемае в свойстве
Properties.Settings.Default.al

должна была бы быть объявлена как-то так:
[XmlElement(Type=typeof(MyTestClass))]
public ArrayList al


В качестве варианта решения можешь либо руками в сгенерированном классе пометить свойство al как
[SettingsSerializeAs(SettingsSerializeAs.Binary)]

Либо использовать вместо ArrayList какой-нибудь StringCollection.


P.S. По поводу класса MyTestClass... Поля не следует делать открытыми. Public должны быть свойства, но не поля.
Re[2]: Как сохранить ArrayList экземпляров пользовательского
От: Mak_71_rus Россия  
Дата: 11.08.11 12:23
Оценка:
Здравствуйте, Spinifex, Вы писали:
S>P.S. По поводу класса MyTestClass... Поля не следует делать открытыми. Public должны быть свойства, но не поля.

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