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

目前,我已经尝试过各种字典和集合,并且它们都可以工作,直到重新启动应用程序,然后所有设置都消失了。

我在某个地方读到ListDictionary是可序列化的,但是我仍然无法使它起作用。如果有人可以给我一些VB.net示例,说明如何使用“应用程序设置”使它生效,那就太好了!

谢谢!

最佳答案

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

我通常要做的是创建一个XmlSerializable的小类,它表示一个键/值对。我认为序列化那些键/值对的集合。以后可以轻松转换回Dictionary(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

10-07 19:32
查看更多