2010-03-13 4 views
1

참조를 사용하여 ... http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx 나는 serializable 일반 사전 있습니다.'세미'일반 사전 직렬화. (C#)

내가 원했던 한 가지는 Key의 속성 노드에 Key를 추가하는 것입니다. 종종 Key는 문자열입니다. 수업을 강요 할 수있는 방법이 있습니까? 그것은 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(); 
    } 

마찬가지로, 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과 같이 변경하고 코드를 사용할 수 있습니다.