簡體   English   中英

存儲通用列表 <CustomObject> 使用ApplicationSettingsBase

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM