[英]Storing generic List<CustomObject> using ApplicationSettingsBase
我正在嘗試使用ApplicationSettingsBase保存List <Foo>,但是即使填充了列表,它也只輸出以下內容:
<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存儲List <Foo>?
同意托馬斯·列維斯克:
以下類別已正確保存/回讀:
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();
在XML序列化中:
因此,您的課程中沒有要序列化的內容...
與Craig所述相同。 我的包裝器類確實有一個無參構造函數,但是它也有一個通用的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;
}
}
向將在設置中使用的每個自定義類添加一個無參數構造函數:
public bar() {
this.baz = "";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.