我需要能够将Dictionary序列化/反序列化为人类可读的(如果归结为人类可编辑的)字符串(最好是XML或Json )。
我只需要使用字符串字典,而不是任何类型的其他对象类型。但是,字符串被假定为自由文本,因此它们可以包含单引号/双引号等字符,因此它们必须正确编码/转义。
这个项目是基于.Net 2.0的,所以很遗憾我不能使用JSON.Net。
你知道什么是最快做到这一点的最佳方法吗?
很明显,我可以编写自己的代码来做这件事,但如果我这样做,我会发现很多令人头疼的问题,特别是在反序列化部分。
任何想法都将受到感谢。
谢谢!
丹尼尔
发布于 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,尽管我还没有玩过这个--我不知道它和其他的相比如何。
发布于 2009-07-10 20:27:45
我认为最简单的方法是创建一个包装器类,该类可以很容易地在XML序列化程序中序列化,并且可以在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;
}
}发布于 2009-07-10 20:21:20
实现IXmlSerializable,这将非常容易。
伪代码:
public class CoolHash : Dictionary<String, String>, IXmlSerializable
{
void WriteXml(XmlWriter writer){
foreach(string key in this.Keys){
writer.WriteElementText(key, this[key]);
}
}
}https://stackoverflow.com/questions/1111724
复制相似问题