2009-07-10 57 views
2

我需要能夠序列化/反序列化一個人類可讀的字典(如果它歸結爲人類可編輯的)字符串(最好是XML或Json)。在.Net 2.0中序列化/反序列化Dictionary <String,String>的最佳方式是什麼?

我只需要使用字典字典,而不是其他任何類型的對象類型。 然而,這些字符串被認爲是自由文本,因此它們可以具有單/雙引號等字符,因此它們必須正確編碼/轉義。

這個項目基於.Net 2.0,所以我不能使用JSON.Net。

任何想法什麼是快速做到這一點的最佳方法?

我明顯可以編寫自己的代碼來做到這一點,但是如果我這樣做的話,我期望能夠找到很多逃避的麻煩,尤其是在反序列化部分。

任何想法將不勝感激。
謝謝!
丹尼爾

回答

0

執行IXmlSerializable,這將是非常容易的。

僞代碼:

public class CoolHash : Dictionary<String, String>, IXmlSerializable 
{ 
    void WriteXml(XmlWriter writer){ 
    foreach(string key in this.Keys){ 
     writer.WriteElementText(key, this[key]); 
    } 
    } 
} 
+0

關於如何實現ReadXML部分的指針? – 2009-07-10 20:38:21

1

我認爲最簡單的方法是創建一個包裝類,在XML序列化和covertible,並從Dictionary<string,string>容易序列化。這將使其易於編輯,並從考慮中刪除所有轉義問題。

例如

public class Wrapper { 
    public List<string> Keys {get; set; } 
    public List<string> Values {get; set; } 
    public Wrapper() {} 
    public Wrapper(Dictionary<string,string> map) { 
    Keys = new List<string>(map.Keys); 
    Values = new List<string>(map.Values); 
    } 
    public Dictionary<string,string> GetMap() { 
    Dictionary<string,string> map = new Dictionary<string,string>(); 
    for (int i = 0; i < Keys.Length; i++) { 
     map[Keys[i]] = Values[i]; 
    } 
    return map; 
    } 
} 
2

據我所知,現在有三個簡單可行的解決方案這樣的情況:

1)JSON.Net,它不工作.NET 2.0中一個單獨的二進制文件(使事情變得非常簡單,json是一個不錯的格式,比xml更緊湊)。

2)可序列化的字典實現,例如在: http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx (請注意這個版本不處理二進制序列(BinaryFormatter的),因爲失蹤的構造和缺少「[Serializable接口]」屬性,但這需要2分鐘就解決的 - 我希望筆者更新帖子!)

3)SharpSerializer,也使事情變得簡單,雖然默認情況下Xml輸出非常龐大(還沒有試過玩設置)。

很抱歉發佈這麼晚,但我不知道爲什麼這個問題徘徊在沒有答案,我認爲任何這些答案都可以幫助這個不經意的搜索者!

更新:顯然我錯過了一個,NXmlSerializer,雖然我還沒有玩過這個 - 我不知道它是如何與其他人比較。

相關問題