应用程序设置中的VB.Net WPF键值对字典

时间:2009-06-27 23:45:15

标签: wpf vb.net generics dictionary

我正在寻找一种在应用程序设置中存储键值对的方法。根据我的发现,键值对字典不可序列化,因此无法存储在应用程序设置中。

目前我已经尝试了各种字典和集合,所有这些字典和集合都有效,直到我重新启动应用程序,然后所有设置都消失了。

在某处我读到ListDictionary是可序列化的,但我仍然无法让它工作。如果有人可以给我一些VB.net示例,说明如何使用应用程序设置来实现这一点,那就太棒了!

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用StringCollection并存储“name1 = value1; name2 = value2; ...; namen = valuen”并自行解析,或者您可以使用ConfigurationSection class创建自己的部分。此外,请确保在设置上调用“保存”以保留数据。 :) Check out this,以防万一。

答案 1 :(得分:2)

Dictionary(Of TKey,TValue)类实际上是可序列化的,但是在二进制意义上。遗憾的是,XmlSerialization引擎无法处理任何实现IDictionary的内容,这就是阻止它在应用程序设置中工作的原因。

我通常要解决的问题是创建一个XmlSerializable的小类,它代表一个Key / Value对。我想序列化这些键/值对的集合。它可以在以后轻松转换回字典(Of 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