Словарь пары значений ключей VB.Net WPF в настройках приложения - PullRequest
4 голосов
/ 28 июня 2009

Я ищу способ сохранить пару ключ-значение в настройках приложения. Из того, что я обнаружил, словари пары ключ-значение не сериализуются и поэтому не могут быть сохранены в настройках приложения.

В настоящее время я перепробовал все виды словарей и сборников, и все они работают, пока я не перезапущу приложение, тогда все настройки пропали.

Где-то я читал, что ListDictionary является сериализуемым, но я до сих пор не смог заставить это работать. Если бы кто-нибудь мог дать мне несколько примеров VB.net о том, как заставить это работать, используя Настройки приложения, это было бы здорово!

Спасибо!

Ответы [ 2 ]

2 голосов
/ 28 июня 2009

Класс Dictionary (Of TKey, TValue) фактически сериализуем, но в двоичном смысле. К сожалению, механизм XmlSerialization не может обрабатывать все, что реализует IDictionary, и именно это мешает ему работать в настройках приложения.

Что я обычно делаю, чтобы обойти это, так это создаю небольшой класс, который является XmlSerializable и представляет пару ключ / значение. Я думаю, что сериализовать коллекцию этих пар ключ / значение. Это легко конвертируется обратно в словарь (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
2 голосов
/ 28 июня 2009

Вы можете использовать StringCollection и сохранить "name1 = value1; name2 = value2; ...; namen = valuen" и проанализировать его самостоятельно, либо вы можете использовать ConfigurationSection class для создания собственного раздела. Также убедитесь, что вы сохранили данные в настройках, чтобы сохранить данные. :) Проверьте это , на всякий случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...