Serializzazione di un elenco di coppie chiave / valore in XML

Ho un elenco di coppie chiave / valore che vorrei memorizzare e recuperare da un file XML. Quindi questo compito è simile come descritto qui . Sto cercando di seguire il consiglio nella risposta contrassegnata (utilizzando KeyValuePair e XmlSerializer ) ma non riesco a farlo funzionare.

Quello che ho finora è una class “Impostazioni” …

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

… un’istanza di questa class …

 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)); 

… e il seguente codice per scrivere quell’istanza in un file XML:

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

Il file risultante è:

   2      

Quindi nessuna chiave o valore delle coppie nella mia lista sono memorizzate anche se il numero di elementi è corretto. Ovviamente sto facendo qualcosa di fondamentalmente sbagliato. Le mie domande sono:

  • Come posso memorizzare le coppie chiave / valore della lista nel file?
  • Come posso cambiare il nome generato in modo predefinito “KeyValuePairOfStringInt32” degli elementi nell’elenco con altri nomi come “listElement” che mi piacerebbe avere?

KeyValuePair non è serializzabile, perché ha proprietà di sola lettura. Ecco maggiori informazioni (grazie a Thomas Levesque). Per cambiare il nome generato usa l’attributo [XmlType] .

Definisci il tuo in questo modo:

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