c# – Hashtables是否可序列化?
我在整个互联网上看到一篇普遍的
belief(2009年文章),
Hashtable 课程不可序列化;但是,我找不到任何支持这个概念的现代文档.
这种信念源于另一个记录不足的信念,即 此外,Hashtable实现了ISerializable并包含接受序列化信息的扩展方法. 那么,这笔交易是什么? Hashtable是否可序列化?哪些文档支持围绕IDictionary的概念? 进一步澄清(请阅读): 大量文档支持IDictionary不可序列化的声明;但是,这侧重于使用基于XML的序列化与类的交互.如下面的注释和MSDN中所提到的ISerializable表示类是可序列化的.它还意味着必须负责其自身序列化的类. 我认为这否定了Hashtable不可序列化的说法.这可能是我的问题的起源. 解决方法
普遍存在的信念是如此普遍,因为它是真的:
var t = new Hashtable(); t.Add("Hi!","I'm here"); t.Add("Hm","Yup"); var serializer = new XmlSerializer(typeof(Hashtable)); using (var sw = new StringWriter()) { serializer.Serialize(sw,t); Console.WriteLine(sw.ToString()); } 投
这并不意味着序列化哈希表几乎是不可能的.当然,我可以遍历所有键和值,将它们写入字符串,然后从中重构哈希表.只是我不能完全使用序列化基础设施. 这是什么原因?它实际上非常简单 – XmlSerializer旨在生成良好的XML,本着XML的交换格式的精神设计.并且XML没有任何类型的字典或“键值”机制.因此,为了支持哈希表序列化,他们必须使用自己的规则制作自己的“子格式”.回到.NET的设计时,这是一个巨大的禁忌 – XML是一种交换格式.对格式的任何扩展(hah)意味着你不再兼容,无论你有多么好的想法. 当然,如今,每个人和他们的祖母都在制作不用于交换目的的XML数据.并不是一件坏事(毕竟,.NET配置文件也是一种XML格式).但它也有点不对劲. 相反,请使用BinaryFormatter之类的东西.这是一个.NET团队设计整个格式的类,并且不受标准的限制.瞧,看看BinaryFormatter可以很好地序列化和反序列化Hashtable. 因此,稍微更正确的信念是“Hashtable无法序列化为有效的标准XML.特别是当您尝试序列化Hashtable时,XmlSerializer类会抛出错误.” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |