首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ApplicationSettingsBase存储通用List<CustomObject>

使用ApplicationSettingsBase存储通用List<CustomObject>
EN

Stack Overflow用户
提问于 2009-05-15 11:45:11
回答 3查看 5.6K关注 0票数 6

我正在尝试使用ApplicationSettingsBase保存列表,但是即使列表已填充,它也只输出以下内容:

代码语言:javascript
复制
<setting name="Foobar" serializeAs="Xml">
    <value />
</setting>

Foo定义如下:

代码语言:javascript
复制
[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来存储列表

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-15 12:48:00

同意Thomas Levesque的观点:

已正确保存/回读以下类:

代码语言:javascript
复制
public class Foo
{
    public string Name { get; set; }

    public string MashupString { get; set; }

    public override string ToString()
    {
        return Name;
    }
}

注意:我不需要SerializableAttribute

xml编辑:下面是的输出:

代码语言:javascript
复制
<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>

和我使用的设置类:

代码语言:javascript
复制
sealed class MySettings : ApplicationSettingsBase
{
    [UserScopedSetting]
    public List<Foo> Foos
    {
        get { return (List<Foo>)this["Foos"]; }
        set { this["Foos"] = value; }
    }
}

最后是我插入的项目:

代码语言:javascript
复制
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();
票数 11
EN

Stack Overflow用户

发布于 2009-05-15 11:55:08

在XML序列化中:

只有properties

  • Only公共属性是serialized

  • Read-only属性,
  • 字段未序列化,

也未序列化

所以在你的类中没有需要序列化的东西...

票数 3
EN

Stack Overflow用户

发布于 2012-01-25 18:57:09

这里和Craig描述的一样。我的Wrapper-Class确实有一个无参数的构造函数,但它也有一个通用的List<T>,其中T没有得到一个无参数的构造函数,所以save()也失败了。

如下所示:

代码语言:javascript
复制
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构造函数添加到将在设置中使用的每个自定义类:

代码语言:javascript
复制
public bar() {
    this.baz = "";
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/868217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档