为什么 XmlSerializer 不支持字典?
只是好奇为什么 XmlSerializer
不支持字典?
您可以通过使用 DataContractSerializer 并将对象写入 XmlTextWriter 来轻松解决这个问题,但是字典的哪些特征使得 XmlSerializer 变得困难 考虑到它实际上是一个 KeyValuePairs 数组。
事实上,您可以将 IDictionary
传递给需要 IEnumerable
的方法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
哈希表通常需要哈希码和相等比较器提供程序。这些不能轻松地在 XML 中序列化,并且绝对不可移植。
但我想你已经找到了答案。只需将哈希表序列化为
List>
,然后(重新)将其构建为哈希表即可。Hashtables need hashcode and equality comparer providers generally. These cant be serialized easily in XML, and definitely will not be portable.
But I think you already found your answer. Just serialize the hashtable as a
List<KeyValuePair<K,V>>
and then (re)construct it into a hashtable.这已经太晚了 - 但我在自己寻找答案时发现了这个问题,并认为我会分享我的最终答案,即用一个可以序列化所有内容的不同工具替换
XmlSerializer
:http://www.sharpserializer.com
它开箱即用,可以序列化字典和多层自定义类型,甚至使用接口作为类型参数的泛型。还拥有完全许可的许可证。
谢谢帕维尔·伊兹科夫斯基!
This is waaay late - but I found this question whilst looking for the answer myself, and thought I'd share my eventual answer which was to replace
XmlSerializer
with a different tool that will serialize everything:http://www.sharpserializer.com
It worked for me straight out of the box, serializing Dictionaries, and multi-layered custom types, and even generics using interfaces as type arguments. Also has a fully permissive license.
Thank you Pawel Idzikowski!
您可以使用 ExtendedXmlSerializer。
如果您有一个类:
并创建此类的实例:
您可以使用 ExtendedXmlSerializer 序列化此对象:
输出 xml 将如下所示:
您可以从 nuget 或运行以下命令:
You can use ExtendedXmlSerializer.
If you have a class:
and create instance of this class:
You can serialize this object using ExtendedXmlSerializer:
Output xml will look like:
You can install ExtendedXmlSerializer from nuget or run the following command: