【发布时间】:2014-07-18 22:38:19
【问题描述】:
我正在将字典序列化为 XML。当我创建一个新字典时,我使用构造函数来提供 EqualityComparer,例如不带大小写
var tabs = new Dictionary<string,Tab>(StringComparer.OrdinalIgnoreCase);
然后我序列化为 XML,当我反序列化时,有关大小写的信息会丢失 - 反序列化是使用 GenericEqualityComparer 对字典进行的,这显然是区分大小写的,因为如果它们没有正确大小写,它就找不到我的密钥。
有什么想法可以改变它吗?
一种方法是创建一个新字典并将数据从反序列化复制到新字典,但这似乎很麻烦。
更新:
反序列化一直有效,只是它将序列化的字典反序列化为不使用不区分大小写键的字典。
【问题讨论】:
-
使用DataContract时会不会出现这个问题?
-
是的,包含 Dictionary
类型的属性的类被标记为 DataContract,而该属性被标记为 DataMbember,如果你想知道的话 -
是的,它是,但现在你发现它可以在 .NET 4.0 中工作,我没有什么可跟进的了。恭喜您解决了自己的问题。
-
实际上不,序列化/反序列化一直有效,它是反序列化到不区分大小写的字典不起作用。仍然。
-
我刚刚使用 Reflector 检查了 .NET 4.0,很明显
OnDeserialization方法可以正确处理比较器。您是否尝试过利用SerializableAttribute?
标签: c# dictionary xml-serialization .net-4.0