Сериализация списка Пар ключ/значение к XML

У меня есть список пар ключ/значение, в которых я хотел бы сохранить и получить от 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
  
    
    
  

Так ни ключ, ни значение пар в моем списке не хранятся, хотя число элементов корректно. Очевидно, я делаю что-то в основном неправильно. Мои вопросы:

  • Как я могу сохранить пары ключ/значение списка в файле?
  • То, как я могу изменить значение по умолчанию, генерировало имя "KeyValuePairOfStringInt32" элементов в списке к некоторому другому имени как "listElement", который я хотел бы иметь?

30
задан Community 23 May 2017 в 12:19
поделиться

1 ответ

KeyValuePair не сериализуем, потому что он имеет свойства только для чтения. Здесь - дополнительная информация (спасибо Томасу Левеску). Для изменения сгенерированного имени используйте атрибут [XmlType] .

Определите свое собственное следующим образом:

[Serializable]
[XmlType(TypeName="WhateverNameYouLike")]
public struct KeyValuePair<K, V>
{
  public K Key 
  { get; set; }

  public V Value 
  { get; set; }
}
56
ответ дан 27 November 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: