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 类是可序列化的并且我已经对其进行了测试,它也不会保存任何数据。

4

2 回答 2

3

我找到了问题的根源。简单地使用一个普通的 Array 不会削减它。经过考虑,反序列化器不知道将数组项反序列化为哪种类型。我没有看到数组需要强类型。设计师让我愚蠢地认为这是一个普通的通用数组:

    [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 中进行这些更改,而不是来自设计师。

于 2010-05-05T02:42:17.600 回答
1

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

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

于 2010-05-04T00:26:00.460 回答