Ho un elenco di coppie chiave/valore che desidero memorizzare e recuperare da un file XML. Quindi questa attività è simile a quella descritta in here. Sto cercando di seguire il consiglio nella risposta contrassegnata (utilizzando un KeyValuePair e un XmlSerializer) ma non riesco a farlo funzionare.Serializzazione di un elenco di coppie chiave/valore in XML
Quello che ho finora è una classe "Impostazioni" ...
public class Settings
{
public int simpleValue;
public List<KeyValuePair<string, int>> list;
}
... un'istanza di questa classe ...
Settings aSettings = new Settings();
aSettings.simpleValue = 2;
aSettings.list = new List<KeyValuePair<string, int>>();
aSettings.list.Add(new KeyValuePair<string, int>("m1", 1));
aSettings.list.Add(new KeyValuePair<string, int>("m2", 2));
... e il seguente codice scrivere che ad esempio 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 è:
<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<simpleValue>2</simpleValue>
<list>
<KeyValuePairOfStringInt32 />
<KeyValuePairOfStringInt32 />
</list>
</Settings>
Quindi, nessuna chiave o valore delle coppie nella mia lista vengono 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 predefinito "KeyValuePairOfStringInt32" degli elementi nell'elenco con un altro nome come "listElement" che mi piacerebbe avere?
Grande, funziona, grazie! Ho aggiunto un costruttore alla tua struct: 'public KeyValuePair (K k, V v): this() {Key = k; Valore = v; } ', quindi posso usare il mio codice per riempire l'elenco senza modifiche. Inoltre ho capito che come alternativa a '[XmlType]' Posso decorare la lista nella classe Settings con '[XmlArrayItem (ElementName =" WhateverNameYouLike ")]'. Può essere utile se avessi due elenchi di 'KeyValuePair', ma voglio dare agli elementi nomi diversi nel file XML. Grazie ancora! – Slauma
Felice di aiutarti :) –
Non ha nulla a che fare con l'attributo 'Serializable': la serializzazione XML non ne ha bisogno. Il motivo è che le proprietà 'Key' e' Value' sono di sola lettura –