为什么不能将Dictionary <key,value>序列化?或者可以吗?</key,value>

时间:2011-12-01 14:13:45

标签: .net generics serialization dictionary

(Havent发现了一个问这个问题)。

为什么不能将字典序列化?

大多数资源,网站,博客等都说无法被序列化。但是,阅读“CLR via C#”第3版,第664页,将Dictionary作为可以序列化的对象图的示例。

请注意,本章讨论二进制序列化。那么可以使用BinaryFormatter进行序列化,但它不能被XML序列化吗?

或者在IDictionary和Dictionary之间缺少一些区别吗?

澄清......在什么情况下可以将字典序列化,在什么情况下不能序列化。

感谢。

3 个答案:

答案 0 :(得分:4)

您正在寻找的答案位于以下链接:Serialize Class containing Dictionary member

您将不得不自己实施,或者使用其他人,您可以在此链接中找到:.NET XML serialization gotchas?

答案 1 :(得分:3)

我认为这只是微软XML序列化程序(System.Xml.Serialization.XmlSerializer)的限制。大多数其他序列化程序将支持词典。

这不是序列化的一般限制,甚至不是xml序列化,只是该实现的限制。 XmlSerializer总的来说非常弱。

答案 2 :(得分:0)

Here就是这样的原因:

从内到外重构对象,并且在反序列化期间调用方法可能会产生不良副作用,因为调用的方法可能引用在调用时尚未反序列化的对象引用。如果要反序列化的类实现了IDeserializationCallback,则在对整个对象图进行反序列化时,将自动调用OnSerialization方法。此时,引用的所有子对象都已完全恢复。哈希表是不使用上述事件侦听器而难以反序列化的类的典型示例。在反序列化期间很容易检索键/值对,但是将这些对象添加回哈希表会导致问题,因为无法保证从哈希表派生的类已被反序列化。因此,不建议在此阶段调用哈希表上的方法。