Serializar una lista de pares Clave / Valor a XML

Tengo una lista de pares clave / valor que me gustaría almacenar y recuperar de un archivo XML. Entonces esta tarea es similar a la descrita aquí . Intento seguir el consejo en la respuesta marcada (usando un KeyValuePair y un XmlSerializer ) pero no lo hago funcionar.

Lo que tengo hasta ahora es una clase de “Configuración” …

public class Settings { public int simpleValue; public List<KeyValuePair> list; } 

… una instancia de esta clase …

 Settings aSettings = new Settings(); aSettings.simpleValue = 2; aSettings.list = new List<KeyValuePair>(); aSettings.list.Add(new KeyValuePair("m1", 1)); aSettings.list.Add(new KeyValuePair("m2", 2)); 

… y el siguiente código para escribir esa instancia en un archivo XML:

 XmlSerializer serializer = new XmlSerializer(typeof(Settings)); TextWriter writer = new StreamWriter("c:\\testfile.xml"); serializer.Serialize(writer, aSettings); writer.Close(); 

El archivo resultante es:

   2      

Por lo tanto, ni la clave ni el valor de los pares de mi lista se almacenan aunque la cantidad de elementos sea correcta. Obviamente estoy haciendo algo básicamente malo. Mis preguntas son:

  • ¿Cómo puedo almacenar los pares clave / valor de la lista en el archivo?
  • ¿Cómo puedo cambiar el nombre generado por defecto “KeyValuePairOfStringInt32” de los elementos en la lista a algún otro nombre como “listElement” que me gustaría tener?

KeyValuePair no es serializable, porque tiene propiedades de solo lectura. Aquí hay más información (gracias a Thomas Levesque). Para cambiar el nombre generado use el atributo [XmlType] .

Define el tuyo así:

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