2009-07-22 67 views
2

我正在C#中開發一個應用程序,它需要在設置文件中存儲鍵值對。 我試圖想保存設置文件字典的ArrayList,但它失敗。這裏是我做了什麼:設置文件中的鍵值存儲

if (Settings1.Default.arraylst == null) 
     { 
      Settings1.Default.arraylst = new System.Collections.ArrayList(); 
     } 

     Dictionary<string, string> dd = new Dictionary<string, string>(); 
     dd.Add("1", "1"); 

     Settings1.Default.arraylst.Add(dd);    
     Settings1.Default.Save(); 

當我重新啓動arrarylist成爲空的應用..提前

謝謝....

回答

4

這是因爲通用字典是不是序列化的一些原因,嘗試用這個

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Xml.Serialization; 

[XmlRoot("dictionary")] 
public class SerializableDictionary<TKey, TValue> 
    : Dictionary<TKey, TValue>, IXmlSerializable 
{ 
    #region IXmlSerializable Members 
    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     return null; 
    } 
    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); 
     XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); 
     bool wasEmpty = reader.IsEmptyElement; 
     reader.Read(); 

     if (wasEmpty) 
      return; 
     while (reader.NodeType != System.Xml.XmlNodeType.EndElement) 
     { 
      reader.ReadStartElement("item"); 
      reader.ReadStartElement("key"); 
      TKey key = (TKey)keySerializer.Deserialize(reader); 
      reader.ReadEndElement(); 
      reader.ReadStartElement("value"); 
      TValue value = (TValue)valueSerializer.Deserialize(reader); 
      reader.ReadEndElement(); 
      this.Add(key, value); 
      reader.ReadEndElement(); 
      reader.MoveToContent(); 
     } 
     reader.ReadEndElement(); 
    } 
    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); 
     XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); 
     foreach (TKey key in this.Keys) 
     { 

      writer.WriteStartElement("item"); 
      writer.WriteStartElement("key"); 
      keySerializer.Serialize(writer, key); 
      writer.WriteEndElement(); 
      writer.WriteStartElement("value"); 
      TValue value = this[key]; 
      valueSerializer.Serialize(writer, value); 
      writer.WriteEndElement(); 
      writer.WriteEndElement(); 
     } 
    } 
    #endregion 
} 

,我在這裏找到XML Serializable Generic Dictionary

1

C#設置文件只是XML文件,只會保存可序列化的類,否則保存時不會寫出數據。不幸的是字典不可序列化。

一個解決方案是建立你自己的包裝,正確序列化字典。 This link可能會給你一個關於這個涉及的內容的想法。

另一種解決辦法是寫你的鍵/值對作爲一個長字符串數組,並解析它,當你讀回。

//Define a string[] in your settings 

List<string> keyValues = new List<string>(); 
foreach(KeyValuePair<string,string> pair in dd) 
{ 
    keyValues.Add(pair.Key); 
    keyValues.Add(pair.Value); 
} 
Settings1.Default.KeyValuePairs = keyValues.ToArray(); 

當你在一個類似的負載然後讀回對時尚。