将对象列表序列化为.settings

时间:2012-10-16 08:46:30

标签: c# .net xml serialization settings.settings

我试图将对象列表序列化到我的user.settings文件中。我尝试了很多东西,我唯一能做的就是这里的解决方案。 Add a collection of a custom class to Settings.Settings我尝试了许多不同的东西,但这是唯一一直有效的东西。

编辑:我尝试序列化的是一个对象列表(可序列化的类),或者只是一个元组列表

解决方案如下所示:

public class Favorites: ApplicationSettingsBase
{
    [UserScopedSetting()]
    [SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)]
    [DefaultSettingValue("")]
    public System.Collections.ArrayList FavoritesList
    {
        get
        {
            return ((System.Collections.ArrayList)this["FavoritesList"]);
        }
        set
        {
            this["FavoritesList"] = (System.Collections.ArrayList)value;
        }
    }
}

从技术上讲,它有效。但是,我想让它作为XML序列化工作,而不是二进制。切换到SettingsSerializeAs.Xml,它没有序列化设置,我得到的只是这些设置的空标签。将设置序列化为XML时,是否必须以不同方式执行此操作?

3 个答案:

答案 0 :(得分:1)

您可以使用XmlSerializer并在代码中序列化您的集合。

然后您可以将序列化数据字符串保存到设置中。

答案 1 :(得分:1)

请试试这个,

public class Favorites: ApplicationSettingsBase
{
    private String[] favoritesList;

    [UserScopedSetting()]
    [System.Xml.Serialization.XmlElementAttribute("FavoritesList")]
    [DefaultSettingValue("")]
    public String[] FavoritesList
    {
        get
        {
            return (this.favoritesList);
        }
        set
        {
            this.favoritesList = value;
        }
    }
}

注意:我使用了字符串数据类型的数组。但理想情况下,它可以是您的自定义对象的数组

答案 2 :(得分:0)

我看起来像这样工作,设置存储了一个“收藏夹”类型的对象:

public sealed class Favorites : ApplicationSettingsBase
{
    public Favorites()
    {
        this.FavoritesList = new List<Favorite>();
    }

    [UserScopedSetting]
    public List<Favorite> FavoritesList
    {
        get
        {
            return (List<Favorite>)this["FavoritesList"];
        }
        set
        {
            this["FavoritesList"] = value;
        }
    }
}

[Serializable]
public class Favorit
{
    // ...
}