(Havent发现了一个问这个问题)。
为什么不能将字典序列化?
大多数资源,网站,博客等都说无法被序列化。但是,阅读“CLR via C#”第3版,第664页,将Dictionary作为可以序列化的对象图的示例。
请注意,本章讨论二进制序列化。那么可以使用BinaryFormatter进行序列化,但它不能被XML序列化吗?
或者在IDictionary和Dictionary之间缺少一些区别吗?
澄清......在什么情况下可以将字典序列化,在什么情况下不能序列化。
感谢。
答案 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方法。此时,引用的所有子对象都已完全恢复。哈希表是不使用上述事件侦听器而难以反序列化的类的典型示例。在反序列化期间很容易检索键/值对,但是将这些对象添加回哈希表会导致问题,因为无法保证从哈希表派生的类已被反序列化。因此,不建议在此阶段调用哈希表上的方法。