我在c#(框架2.0)中搜索可序列化的字典,我找到了这个:
http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx
这是非常好的,但我想让它像这样序列化我的字典:
<item>
<key>my_first_key</key>
<value>my_first_value</value>
</item>
<item>
<key>my_second_key</key>
<value>my_second_value</value>
</item>
我试图像这样修改writeXml方法:
writer.WriteStartElement("item")
writer.WriteElementString("key", key.ToString)
writer.WriteElementString("value", value.ToString)
它工作正常,但要将xml输入反序列化为字典,我无法使其工作。我试过这个:
reader.ReadStartElement("item")
reader.ReadStartElement("key")
Dim key As String = reader.ReadString()
我正确地获得了密钥,但是进入了String对象。当我尝试添加我的键/值对时:
Me.Add(key, value)
它不起作用,因为key是一个字符串而不是TKey类型。你知道如何“转换”或将字符串转换成TKey吗?或者将键/值作为字符串封装到TKey / Tvalue类型中?
提前多多感谢!
答案 0 :(得分:1)
您的要求似乎非常关注字符串,而建议的代码是通用的。但是,您可能会遇到特殊情况,即
reader.ReadStartElement("key");
if(typeof(TKey) == typeof(string)) {
TKey key = (TKey)(object)reader.ReadString();
} else {
TKey key = (TKey)keySerializer.Deserialize(reader);
}
reader.ReadEndElement();
(同样值)
和
writer.WriteStartElement("item")
if(typeof(TKey) == typeof(string)) {
writer.WriteElementString("key", (string)(object)key);
} else {
writer.WriteStartElement("key");
keySerializer.Serialize(writer, key);
writer.WriteEndElement();
}
(和值类似)
未经测试 - 但应该完成这项工作。