出于某种原因,我似乎无法将我的班级数组存储到设置中。这是代码:
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类是可序列化的并且我已经测试过了。
答案 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可用。