【发布时间】:2016-11-16 04:24:57
【问题描述】:
我在互联网上看到了一个普遍的belief(2009 年文章)Hashtable 类不可序列化;但是,我找不到任何支持这一概念的现代文档。
这种信念源于另一个有据可查的信念,即IDictionary 接口会阻止序列化;但是,我今天在 MSDN 中找不到任何支持这种说法的东西。
此外,Hashtable 实现了ISerializable 并包含接受序列化信息的扩展方法。
那么,交易是什么? Hashtable 是可序列化的吗?支持IDictionary这一概念的文档在哪里?
进一步说明(请阅读):
大量文档支持IDictionary 不可序列化的说法;但是,这侧重于使用基于 XML 的序列化与类交互。 ISerializable 在下面的 cmets 和 MSDN 中都提到,表明一个类是可序列化的。这也意味着类必须负责自己的序列化。
我认为这否定了 Hashtable 不可序列化的说法。这也许是我的问题的起源。
【问题讨论】:
-
@RobertHarvey 当然。确实如此。但是要说某些东西显然不可序列化应该得到文档的支持,特别是如果这个东西扩展了
ISerializable。考虑到 NewtonSoft 等库的可用性,这似乎是一个特别难以支持的声明。 -
它在this page: "XmlSerializer 无法处理实现 IDictionary 接口的类。这部分是由于调度限制,部分是由于哈希表在XSD 类型系统。唯一的解决方案是实现一个不实现 IDictionary 接口的自定义哈希表。”(Google 是一个很棒的工具)。
-
根据this article,给出的原因是“抛出 System.NotSupportedException 的原因是因为 IDictionary 类实现了 IXmlSerializable 接口。IXmlSerializable 接口使我们覆盖了以下方法:GetSchema、ReadXml和 WriteXml。”。 2010 年文章 :)
-
抛开所有关于序列化的讨论——现在是 2016 年,为什么还要使用
HashTable? -
序列化有多种形式。有些工作(BinaryFormatter,Json),有些不工作(Xml)。这在 2016 年是否相关?根本不要使用
Hashtable类。
标签: c# .net serialization