为什么XmlSerializer不支持Dictionary?

the*_*onk 46 c# xml dictionary xmlserializer

只是好奇为什么词典不受支持XmlSerializer

你可以通过使用DataContractSerializer和写入对象来轻松地绕过它XmlTextWriter,但是如果XmlSerializer考虑到它真的是一个KeyValuePairs数组,那么字典的特征是什么使它难以处理.

实际上,你可以传递一个IDictionary<TKey, TItem>期望的方法IEnumerable<KeyValuePairs<TKey, ITem>>.

lep*_*pie 27

Hashtables通常需要哈希码和相等比较器提供程序.这些不能用XML轻松序列化,绝对不能移植.

但我想你已经找到了答案.只需将哈希表序列化为a List<KeyValuePair<K,V>>,然后(重新)将其构造为哈希表.

  • Dictionary中的哪些方法/属性意味着它必须作为哈希表实现?Dictionary和IDictionary是Key/Value对的集合,与Hashtable实现不同.从序列化的角度来看,我们的目标似乎是将数据从易失性存储器中取出,以便能够在以后加载它.将*any*数据重新加载到接口的不同具体实现中将导致不同的行为. (4认同)
  • 或使用该代码:http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx (3认同)
  • 序列化 KeyValuePair 不起作用。你最终会得到一个空标签。请参阅:/sf/ask/186124151/ (2认同)

Nic*_*end 7

这是迟到了 - 但我在找到答案的同时找到了这个问题,并且我认为我会分享我的最终答案,即XmlSerializer用一个将序列化所有内容的不同工具替换:

http://www.sharpserializer.com

它直接开箱即用,序列化字典,多层自定义类型,甚至使用接口作为类型参数的泛型.还有一个完全许可的许可证.

谢谢Pawel Idzikowski!

  • DataContractSerializer也将序列化字典,现在是.NET Framework的一部分. (4认同)