2010-05-03 50 views
2

出於某種原因,我似乎無法將我的課程數組存儲到設置中。下面的代碼:如何將特定類型的數組存儲到我的設置文件中?

  var newLink = new Link(); 
      Properties.Settings.Default.Links = new ArrayList(); 
      Properties.Settings.Default.Links.Add(newLink); 
      Properties.Settings.Default.Save(); 

在我Settings.Designer.cs我指定的字段是一個數組列表:

[global::System.Configuration.UserScopedSettingAttribute()] 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    public global::System.Collections.ArrayList Links { 
     get { 
      return ((global::System.Collections.ArrayList)(this["Links"])); 
     } 
     set { 
      this["Links"] = value; 
     } 
    } 

出於某種原因,它不會保存任何數據,即使Link類是可序列化的,我已經測試過它。

+1

「我看起來不像」你怎麼看?拋出異常嗎?加載時列表是否爲空?沒有重新加載是空的? – Foxfire 2010-05-03 23:52:36

+0

列表是空的,沒有拋出異常。不知何故,它不會序列化我的鏈接。 – 2010-05-03 23:54:04

+0

數據是否包含在設置文件中(這是一個XML文件,因此您可以輕鬆檢查)? – Foxfire 2010-05-03 23:56:24

回答

3

我發現問題的根源。簡單地使用普通數組不會削減它。想到它之後,反序列化器就不知道用什麼類型來反序列化數組項。我沒有看到陣列需要強大的輸入。設計師使我愚蠢地認爲這是一個普通的通用陣列:

[global::System.Configuration.UserScopedSettingAttribute()] 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    public List<Link> Links 
    { 
     get { 
      return ((List<Link>)(this["Links"])); 
     } 
     set { 
      this["Links"] = value; 
     } 
    } 

我不得不做出的Settings.Designer.cs而不是從設計師的這些變化。

+0

謝謝,那個答案幫了我大忙! – Evan 2011-10-07 00:51:57

1

請確保您的鏈接類是正確的XML序列化或它有一個字符串的typeconverter(當使用application.settings文件時,這是首選)。

我會假設你的類型中的東西不會轉換成XML序列化格式。而你的user.config顯示它沒有任何可用的字符串類型轉換器。

相關問題