2012-10-16 48 views
0

我試圖序列化一個對象列表到我的user.settings文件。我嘗試了很多東西,我唯一能做的就是解決方案。 Add a collection of a custom class to 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時,是否需要以不同的方式進行操作?

回答

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 
{ 
    // ... 
} 
1

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

然後您可以將序列化的數據字符串保存到設置中。

+0

我認爲,序列化我需要的一切(在這種情況下)的收藏夾,對象的整個列表,並將其放入一個設置字符串,但我希望避免一個解決方案,有點「設置」機制「外」... – Andreas

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; 
     } 
    } 
} 

注:我使用的字符串數據類型的數組。但是,理想也可以是你的自定義對象的數組

+0

如果,因爲你的例子中,我使用「Tuple []」(或者甚至字符串[]),然後以這種方式使用它,創建Favorites對象,創建列表如果爲null,添加數據,保存收藏夾對象,則不會創建設置文件。 – Andreas

+0

你有可能分享整個班級嗎? –