2009-06-27 67 views
4

我正在尋找一種方法在應用程序設置中存儲鍵值對。根據我發現的,鍵值對字典不可序列化,因此無法存儲在應用程序設置中。VB.Net應用程序設置中的WPF鍵值對字典

目前我已經嘗試各種字典和集合,並且所有這些工作,直到我重新啓動應用程序,然後所有的設置都消失了。

某處我讀了一個ListDictionary是可序列化的,但我仍然無法獲得它的工作。如果有人可以給我一些VB.net的例子,說明如何使用應用程序設置來實現這個功能,那太棒了!

謝謝!

回答

2

字典(TKey,TValue)類實際上是可序列化的,但在二進制意義上。不幸的是,XmlSerialization引擎無法處理任何實現了IDictionary的東西,這就阻止了它在應用程序設置中的工作。

我通常會這樣做的是創建一個小類,它是XmlSerializable並表示一個鍵/值對。我想序列化這些鍵/值對的集合。它稍後可以很容易地轉換回字典(TKey,TValue)。

例如,如果兩個項目是姓名和學生

Public Class Pair 
    ' Actual property implementation omited for brevity 
    Public Property Student As Student 
    Public Property Name As String 
End Class 

然後我用下面的來回轉換的陣列和字典

Public Function ToArray(map As Dictionary(Of Name,Student)) As Pair() 
    Return map.Select(Function(x) New Pair(x.Key,x.Value).ToArray() 
End Function 

Public Function ToMap(arr As Pair()) As Dictionary(Of Name, Student) 
    return arr.ToDictionary(Function(x) x.Name, Function(y) y.Student) 
End Function 
+1

那麼如何到使用之間的班級作爲一個設置?我希望這個過程儘可能簡單,如果所有(de /)序列化都可以自動完成,並且我只需要調用My.Settings.Pair.Item(「key」)來調出該值。有什麼辦法可以做到這一點? – DanO 2009-06-28 17:06:35

2

您可以使用StringCollection並存儲「name1 = value1; name2 = value2; ...; namen = valuen」並自己解析它,或者您可以使用ConfigurationSection class來創建自己的部分。此外,請確保您在設置上調用保存以保留數據。 :) Check out this,以防萬一。