25
我有一個要存儲在XML文件中並從中檢索的鍵/值對的列表。所以這個任務與here描述的相似。我試圖按照標記答案中的建議(使用KeyValuePair和XmlSerializer),但我沒有得到它的工作。將鍵/值對列表序列化爲XML
我至今是一個 「設置」 類...
public class Settings
{
public int simpleValue;
public List<KeyValuePair<string, int>> list;
}
...這個類的一個實例...
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));
...以下代碼該實例寫入一個XML文件:
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
TextWriter writer = new StreamWriter("c:\\testfile.xml");
serializer.Serialize(writer, aSettings);
writer.Close();
得到的文件是:
<?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>
因此,雖然元素的數量是正確的,但我的列表中的鍵對和值都不存儲。很明顯,我正在做一些基本錯誤的事情。我的問題是:
- 如何在文件中存儲列表的鍵/值對?
- 如何將列表中元素的默認生成名稱「KeyValuePairOfStringInt32」更改爲我想要的其他名稱,如「listElement」?
大,它的工作原理,謝謝!我在你的結構中添加了一個構造函數:'public KeyValuePair(K k,V v):this(){Key = k;值= v; }',所以我可以使用我的代碼來填充列表而不用更改。我還發現,作爲'[XmlType]'的替代品,我可以用'[XmlArrayItem(ElementName =「WhateverNameYouLike」)]''在Settings類中修飾列表。如果我有兩個'KeyValuePair'列表,但希望在XML文件中爲這些元素指定不同的名稱,那麼這會很有用。再次感謝! – Slauma 2010-04-17 16:32:23
很高興幫助您:) – 2010-04-17 16:49:22
它與'Serializable'屬性無關:XML序列化不需要它。原因是'Key'和'Value'屬性是隻讀的 – 2010-04-17 17:48:30