【问题标题】:serializable dictionary in .NET in Framework 2.0Framework 2.0 中 .NET 中的可序列化字典
【发布时间】:2012-01-15 17:08:25
【问题描述】:

我在 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()

我得到了正确的密钥,但是进入了一个字符串对象。当我尝试像这样添加我的键/值对时:

Me.Add(key, value)

它不起作用,因为 key 是字符串而不是 TKey 类型。您知道如何“转换”或将字符串转换为 TKey 吗?还是把key/value作为字符串封装成TKey/Tvalue类型?

提前非常感谢!

【问题讨论】:

    标签: .net xml serialization dictionary


    【解决方案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();
    }
    

    (和类似的值)

    未经测试 - 但应该可以胜任。

    【讨论】:

    • 非常感谢,这正是我搜索的内容!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多