首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在.Net 2.0中序列化/反序列化Dictionary<String,String>的最佳方法是什么?

在.Net 2.0中序列化/反序列化Dictionary<String,String>的最佳方法是什么?
EN

Stack Overflow用户
提问于 2009-07-10 20:14:31
回答 3查看 4.6K关注 0票数 2

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

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

这个项目是基于.Net 2.0的,所以很遗憾我不能使用JSON.Net。

你知道什么是最快做到这一点的最佳方法吗?

很明显,我可以编写自己的代码来做这件事,但如果我这样做,我会发现很多令人头疼的问题,特别是在反序列化部分。

任何想法都将受到感谢。

谢谢!

丹尼尔

EN

回答 3

Stack Overflow用户

发布于 2010-06-21 03:13:07

据我所知,现在有三种简单可行的解决方案:

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

2)可序列化的字典实现,例如:http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx (请注意,此版本不处理二进制序列化(BinaryFormatter),因为缺少构造函数和缺少" Serializable“属性,但这需要2分钟来修复-我希望作者可以更新帖子!)

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

很抱歉这么晚才发布这篇文章,但我不确定为什么这个问题会被认为是没有答案的,我认为这些答案中的任何一个都会对随意的搜索者有所帮助!

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

票数 2
EN

Stack Overflow用户

发布于 2009-07-10 20:27:45

我认为最简单的方法是创建一个包装器类,该类可以很容易地在XML序列化程序中序列化,并且可以在Dictionary<string,string>之间转换。这将使其易于编辑,并从考虑中删除所有逃脱的问题。

例如

代码语言:javascript
运行
复制
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;
  }
}
票数 1
EN

Stack Overflow用户

发布于 2009-07-10 20:21:20

实现IXmlSerializable,这将非常容易。

伪代码:

代码语言:javascript
运行
复制
public class CoolHash : Dictionary<String, String>, IXmlSerializable
{
   void WriteXml(XmlWriter writer){
     foreach(string key in this.Keys){
        writer.WriteElementText(key, this[key]);
     }
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1111724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档