0

我试图将对象列表序列化到我的 user.settings 文件中。我已经尝试了很多东西,我唯一要做的就是这里的解决方案。将自定义类的集合添加到 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 时,我是否必须采取不同的做法?

4

3 回答 3

1

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

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

于 2012-10-16T09:09:32.493 回答
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;
        }
    }
}

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

于 2012-10-16T09:13:10.613 回答
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
{
    // ...
}
于 2013-01-09T12:20:56.797 回答