Как мне сохранить массив определенного типа в моем файле настроек? - PullRequest
2 голосов
/ 04 мая 2010

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

            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 сериализуем, и я его протестировал.

Ответы [ 2 ]

3 голосов
/ 05 мая 2010

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

    [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, а не из конструктора.

1 голос
/ 04 мая 2010

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

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

...