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

これを試してください、

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 に答える
1

You can use XmlSerializer and in code serialize your collection.

Then you can save serialized data string into settings.

于 2012-10-16T09:09:32.493 に答える
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 に答える