CodePaste Logo
New Snippet New Snippet Recent Snippets Recent Snippets My Snippets My Snippets Web Code Search Snippets Search
Sign inor Register
Language: C#

XmlSerializableDictionary

318 Views
Copy Code Show/Hide Line Numbers
[XmlRoot("dictionary")]
public class XmlSerializableDictionary<TKey, TValue>
   : Dictionary<TKey, TValue>, IXmlSerializable {
 
   #region Constructors
   public XmlSerializableDictionary() : base() { }
 
   public XmlSerializableDictionary(IDictionary<TKey, TValue> dictionary) : base(dictionary) { }
 
   public XmlSerializableDictionary(IEqualityComparer<TKey> comparer) : base(comparer) { }
 
   public XmlSerializableDictionary(int capacity) : base(capacity) { }
 
   public XmlSerializableDictionary(IDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer)
      : base(dictionary, comparer) { }
 
   public XmlSerializableDictionary(int capacity, IEqualityComparer<TKey> comparer) : base(capacity, comparer) { }
 
   protected XmlSerializableDictionary(SerializationInfo info, StreamingContext context) : base(info, context) { }
   #endregion
 
   #region IXmlSerializable Members
   public System.Xml.Schema.XmlSchema GetSchema() {
      return null;
   }
 
   public void ReadXml(System.Xml.XmlReader reader) {
      XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
      XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
 
      bool wasEmpty = reader.IsEmptyElement;
      reader.Read();
 
      if (wasEmpty)
         return;
 
      while (reader.NodeType != System.Xml.XmlNodeType.EndElement) {
         reader.ReadStartElement("item");
 
         reader.ReadStartElement("key");
         TKey key = (TKey)keySerializer.Deserialize(reader);
         reader.ReadEndElement();
 
         reader.ReadStartElement("value");
         TValue value = (TValue)valueSerializer.Deserialize(reader);
         reader.ReadEndElement();
 
         this.Add(key, value);
 
         reader.ReadEndElement();
         reader.MoveToContent();
      }
      reader.ReadEndElement();
   }
 
   public void WriteXml(System.Xml.XmlWriter writer) {
      XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
      XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
 
      foreach (TKey key in this.Keys) {
         writer.WriteStartElement("item");
 
         writer.WriteStartElement("key");
         keySerializer.Serialize(writer, key);
         writer.WriteEndElement();
 
         writer.WriteStartElement("value");
         TValue value = this[key];
         valueSerializer.Serialize(writer, value);
         writer.WriteEndElement();
 
         writer.WriteEndElement();
      }
   }
   #endregion
}
by Athens Springer
  December 17, 2009 @ 10:34pm
Tags:

Add a comment


Report Abuse
brought to you by:
West Wind Techologies



If you find this site useful and use it frequently please consider making a donation to support this free service.
Donate