Framework 2.0中.NET中的可序列化字典

时间:2011-12-08 08:16:10

标签: .net xml serialization dictionary

我在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类型中?

提前多多感谢!

1 个答案:

答案 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();
}

(和值类似)

未经测试 - 但应该完成这项工作。