Serialization 什么';这是序列化/反序列化词典的最佳方法<;字符串,字符串>;在.NET2.0中?

Serialization 什么';这是序列化/反序列化词典的最佳方法<;字符串,字符串>;在.NET2.0中?,serialization,dictionary,.net-2.0,Serialization,Dictionary,.net 2.0,我需要能够将字典序列化/反序列化为人类可读(如果归结为人类可编辑)字符串(最好是XML或Json) 我只需要使用字符串字典,而不需要使用任何类型的其他对象类型。 但是,字符串被假定为自由文本,因此它们可以包含单引号/双引号等字符,因此必须正确编码/转义 这个项目基于.NET2.0,所以很遗憾我不能使用JSON.Net 有什么好办法可以快速做到这一点吗 很明显,我可以编写自己的代码来实现这一点,但如果我这样做,我希望能找到很多可以逃避的麻烦,特别是在反序列化部分 任何想法都将受到欢迎。 谢谢 丹尼

我需要能够将字典序列化/反序列化为人类可读(如果归结为人类可编辑)字符串(最好是XML或Json)

我只需要使用字符串字典,而不需要使用任何类型的其他对象类型。 但是,字符串被假定为自由文本,因此它们可以包含单引号/双引号等字符,因此必须正确编码/转义

这个项目基于.NET2.0,所以很遗憾我不能使用JSON.Net

有什么好办法可以快速做到这一点吗

很明显,我可以编写自己的代码来实现这一点,但如果我这样做,我希望能找到很多可以逃避的麻烦,特别是在反序列化部分

任何想法都将受到欢迎。
谢谢
丹尼尔

实施,这将非常容易

伪代码:

public class CoolHash : Dictionary<String, String>, IXmlSerializable
{
   void WriteXml(XmlWriter writer){
     foreach(string key in this.Keys){
        writer.WriteElementText(key, this[key]);
     }
   }
}
公共类CoolHash:字典,IXmlSerializable
{
void WriteXml(XmlWriter){
foreach(此.Keys中的字符串键){
WriteElementText(key,this[key]);
}
}
}

我认为最简单的方法是创建一个包装器类,该类可以在XML序列化程序中轻松序列化,并且可以在
字典中转换。这将使其易于编辑,并从考虑中删除所有转义问题

比如说

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;
  }
}
公共类包装器{
公共列表键{get;set;}
公共列表值{get;set;}
公共包装器(){}
公共包装器(字典映射){
Keys=新列表(map.Keys);
值=新列表(映射值);
}
公共字典GetMap(){
字典映射=新字典();
for(int i=0;i
据我所知,在这种情况下,现在有三种简单可行的解决方案:

1) JSON.Net,它在.NET2.0中使用单独的二进制文件(这使事情变得非常简单,JSON是一种很好的格式,比xml更紧凑)

2) 可序列化字典实现,例如: (请注意,此版本不处理二进制序列化(BinaryFormatter),因为缺少构造函数和“[Serializable]”属性,但修复此问题需要2分钟-我希望作者能够更新此帖子!)

3) ,也使事情变得简单,尽管默认情况下Xml输出相当庞大(没有尝试使用设置)

很抱歉这么晚才发布,但我不确定为什么这个问题没有得到回答,我想这些答案中的任何一个都会对临时搜索者有所帮助


更新:显然我错过了一个,尽管我没有玩过这个-我不知道它与其他的相比如何。

同样,XmlReader拥有所有信息,因此您可以轻松地通过节点导航,只需将标记名设置为键,将元素值设置为值。您可以在XmlReader文档中找到使用XmlReader读取XML文件的示例。