我正在尝试使用ApplicationSettingsBase保存列表,但是即使列表已填充,它也只输出以下内容:
<setting name="Foobar" serializeAs="Xml">
<value />
</setting>Foo定义如下:
[Serializable()]
public class Foo
{
public String Name;
public Keys Key1;
public Keys Key2;
public String MashupString
{
get
{
return Key1 + " " + Key2;
}
}
public override string ToString()
{
return Name;
}
}如何启用ApplicationSettingsBase来存储列表
发布于 2009-05-15 12:48:00
同意Thomas Levesque的观点:
已正确保存/回读以下类:
public class Foo
{
public string Name { get; set; }
public string MashupString { get; set; }
public override string ToString()
{
return Name;
}
}注意:我不需要SerializableAttribute。
xml编辑:下面是的输出:
<WindowsFormsApplication1.MySettings>
<setting name="Foos" serializeAs="Xml">
<value>
<ArrayOfFoo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Foo>
<Name>Hello</Name>
<MashupString>World</MashupString>
</Foo>
<Foo>
<Name>Bonjour</Name>
<MashupString>Monde</MashupString>
</Foo>
</ArrayOfFoo>
</value>
</setting>
</WindowsFormsApplication1.MySettings>和我使用的设置类:
sealed class MySettings : ApplicationSettingsBase
{
[UserScopedSetting]
public List<Foo> Foos
{
get { return (List<Foo>)this["Foos"]; }
set { this["Foos"] = value; }
}
}最后是我插入的项目:
private MySettings fooSettings = new MySettings();
var list = new List<Foo>()
{
new Foo() { Name = "Hello", MashupString = "World" },
new Foo() { Name = "Bonjour", MashupString = "Monde" }
};
fooSettings.Foos = list;
fooSettings.Save();
fooSettings.Reload();发布于 2009-05-15 11:55:08
在XML序列化中:
只有properties
也未序列化
所以在你的类中没有需要序列化的东西...
发布于 2012-01-25 18:57:09
这里和Craig描述的一样。我的Wrapper-Class确实有一个无参数的构造函数,但它也有一个通用的List<T>,其中T没有得到一个无参数的构造函数,所以save()也失败了。
如下所示:
public class foo {
public List<bar> barList;
public foo() {
this.barList = new List<bar>();
}
}
public class bar {
public string baz;
public bar(string baz) {
this.baz = baz;
}
}将no-arg构造函数添加到将在设置中使用的每个自定义类:
public bar() {
this.baz = "";
}https://stackoverflow.com/questions/868217
复制相似问题