【问题标题】:'Semi' Generic Dictionary Serialization. (C#)“半”通用字典序列化。 (C#)
【发布时间】:2010-03-13 23:05:45
【问题描述】:

使用来自... http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx 的引用我有一个可序列化的通用字典。

我想做的一件事是将 Key 添加到 Values 的 Attribute 节点中(只是因为我希望它是这样格式化的)。通常,密钥只是一个字符串。有什么办法可以强迫班级坚持这一点?它告诉我 TKey 不能从 read.GetAttribute("Key"); 转换为字符串。在值节点上。

    while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
    {
        reader.ReadStartElement("Entry");

        reader.ReadStartElement("Key");

        //TKey key = (TKey)keySerializaer.Deserialize(reader);

        reader.ReadEndElement();

        reader.ReadStartElement("Value");
            TKey key = reader.GetAttribute("Name");

        TValue value = (TValue)valueSerializer.Deserialize(reader);

        reader.ReadEndElement();

        this.Add(key, value); reader.ReadEndElement(); reader.MoveToContent();
    }

同样,对应的 'WriteXml'...

        writer.WriteStartElement("Entry");

        writer.WriteStartElement("Key");
        keySerializaer.Serialize(writer, key);
        writer.WriteEndElement();

        writer.WriteStartElement("Value");
            writer.WriteAttributeString("Name", key.ToString());
        TValue value = this[key]; 
        valueSerializer.Serialize(writer, value);
        writer.WriteEndElement();

        writer.WriteEndElement();

【问题讨论】:

    标签: c# generics xml-serialization


    【解决方案1】:

    它可能经常是一个字符串。没有的时候呢?

    您将如何处理并将任意内容序列化为属性?

    原代码使用keySerializer.Serialize(writer, key);是有原因的。

    如果您明确知道密钥是字符串,则可以将代码更改为 public class StringKeyDictionary<TValue> : Dictionary<string, TValue>, IXmlSerializable 之类的内容并使用您的代码。

    【讨论】:

      猜你喜欢
      • 2017-05-17
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 2019-10-05
      • 2017-01-26
      相关资源
      最近更新 更多