为什么XmlSerializer不支持Dictionary?
只是好奇为什么字典不被XmlSerializer
支持?
通过使用DataContractSerializer
并将该对象写入XmlTextWriter
,您可以轻松解决这个问题,但是由于字典的特性使得XmlSerializer
难以处理,因为它实际上是一个KeyValuePairs数组。
实际上,您可以将IDictionary<TKey, TItem>
传递给期望IEnumerable<KeyValuePairs<TKey, ITem>>
。
散列表通常需要散列码和相等比较器提供者。 这些不能用XML很容易地序列化,而且绝对不会是可移植的。
但是我想你已经find了你的答案。 只要将散List<KeyValuePair<K,V>>
序列化为一个List<KeyValuePair<K,V>>
,然后(重新)构造一个散列表。
这是waaay晚了 – 但我发现这个问题,而我自己寻找答案,并认为我会分享我最终的答案是将XmlSerializer与一个不同的将串行化的一切。
http://www.sharpserializer.com
它直接为我提供了工具,序列化字典和多层自定义types,甚至使用接口作为types参数的遗传学。 也有完全许可的许可证。
谢谢帕维尔Idzikowski!
您可以使用ExtendedXmlSerializer 。 如果你有一个class级:
public class TestClass { public Dictionary<int, string> Dictionary { get; set; } }
并创build这个类的实例:
var obj = new TestClass { Dictionary = new Dictionary<int, string> { {1, "First"}, {2, "Second"}, {3, "Other"}, } };
您可以使用ExtendedXmlSerializer序列化此对象:
ExtendedXmlSerializer serializer = new ExtendedXmlSerializer(); var xml = serializer.Serialize(obj);
输出xml将如下所示:
<TestClass type="Samples.TestClass"> <Dictionary> <Item> <Key>1</Key> <Value>First</Value> </Item> <Item> <Key>2</Key> <Value>Second</Value> </Item> <Item> <Key>3</Key> <Value>Other</Value> </Item> </Dictionary> </TestClass>
您可以从nuget安装ExtendedXmlSerializer或运行以下命令:
Install-Package ExtendedXmlSerializer