2009-07-10 26 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の部分を実装する上での指針? –

+0

同様に、XmlReaderにはすべての情報が含まれているので、簡単にトラフノードをナビゲートし、タグ名をキーおよび要素値として値として設定できます。 XmlReaderを使用してXMLファイルを読み取る例は、XmlReaderのドキュメントを参照してください。 –

1

私は最も簡単な方法は、Dictionary<string,string>へとからXMLシリアライザとcovertibleで簡単にシリアル化ラッパークラスを作成することだと思います。これにより、簡単に編集可能になり、エスケープする問題のすべてが考慮されなくなります。

1)JSON.Net、(別々のバイナリと.NET 2.0での作業を行います。私の知る限り、今3つの簡単な実行可能なソリューションは、このような状況がある知っているように例

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

をするために

本当に簡単になり、jsonはXMLよりもコンパクトな素敵なフォーマットです)。

2)直列化辞書の実装、例えば時: http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx 属性「[Serializableを]」が見つからないため、コンストラクタの欠落(このバージョンは、バイナリシリアル(にBinaryFormatterを扱いませんのでご注意ください)が、これは修正するために2分かかります - 投稿者が投稿を更新してもらいたい)

3)SharpSerializerでも、Xml出力はデフォルトでかなりかさばりますが(設定を試していない)、簡単にできます。

私はこのことを遅く投稿して申し訳ありませんが、なぜ質問が未回答のままになっているのかわかりません。これらの回答のいずれかがカジュアルサーチャーに役立つと思います!

更新:明らかに私は1つを逃しました、NXmlSerializer、私はこれで遊んでいませんでした - 私はそれが他のものとどのように比較されているか分かりません。

関連する問題