2010-03-13 13 views
1

使用參考... http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx我有一個可串行化的通用字典。'半'通用字典序列化。 (C#)

我想要做的一件事就是將鍵添加到值的屬性節點(僅僅因爲它是我想要的格式)。密鑰通常只是一個字符串。有什麼辦法迫使班級堅持這個嗎?它告訴我TKey不能從read.GetAttribute(「Key」);在Value節點上。

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

同樣,corrosponding '中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(); 

回答

1

這可能經常是一個字符串。什麼時候不是?

你將如何處理它並將任意內容序列化爲屬性?

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

如果您明確知道密鑰是字符串,則可以將代碼更改爲像public class StringKeyDictionary<TValue> : Dictionary<string, TValue>, IXmlSerializable之類的代碼並使用您的代碼。