如何将特定类型的数组存储到我的设置文件中?

时间:2010-05-03 23:41:31

标签: .net settings settings.settings

出于某种原因,我似乎无法将我的班级数组存储到设置中。这是代码:

            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 个答案:

答案 0 :(得分: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中进行这些更改,而不是来自设计师。

答案 1 :(得分:1)

确保您的Link类是正确的XML可序列化的,或者它具有字符串转换器到字符串(这在使用application.settings文件时是首选)。

我假设你的类型中的某些内容不会转换为XML序列化格式。而你的user.config显示它没有任何字符串typeconverter可用。