У меня есть список пар ключ/значение, в которых я хотел бы сохранить и получить от XML-файла. Таким образом, эта задача подобна, как описано здесь. Я пытаюсь последовать совету в отмеченном ответе (использующий KeyValuePair и XmlSerializer), но я не получаю его работа.
Что я имею, до сих пор класс "Настроек"...
public class Settings
{
public int simpleValue;
public List> list;
}
... экземпляр этого класса...
Settings aSettings = new Settings();
aSettings.simpleValue = 2;
aSettings.list = new List>();
aSettings.list.Add(new KeyValuePair("m1", 1));
aSettings.list.Add(new KeyValuePair("m2", 2));
... и следующий код, чтобы записать, что экземпляр в XML-файл:
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
TextWriter writer = new StreamWriter("c:\\testfile.xml");
serializer.Serialize(writer, aSettings);
writer.Close();
Получающийся файл:
2
Так ни ключ, ни значение пар в моем списке не хранятся, хотя число элементов корректно. Очевидно, я делаю что-то в основном неправильно. Мои вопросы:
KeyValuePair не сериализуем, потому что он имеет свойства только для чтения. Здесь - дополнительная информация (спасибо Томасу Левеску).
Для изменения сгенерированного имени используйте атрибут [XmlType]
.
Определите свое собственное следующим образом:
[Serializable]
[XmlType(TypeName="WhateverNameYouLike")]
public struct KeyValuePair<K, V>
{
public K Key
{ get; set; }
public V Value
{ get; set; }
}