andrew4582

SerializableDictionary

Mar 11th, 2011
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.34 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.Xml.Serialization;
  3.  
  4. namespace Core.Collections.Generic {
  5.  
  6.     [XmlRoot("dictionary")]
  7.     public class SerializableDictionary<TKey,TValue>
  8.         :Dictionary<TKey,TValue>,IXmlSerializable {
  9.        
  10.         #region Constructor
  11.         public SerializableDictionary() {
  12.         }
  13.  
  14.         public SerializableDictionary(IDictionary<TKey,TValue> dictionary)
  15.             : base(dictionary) {
  16.         }
  17.  
  18.         #endregion
  19.  
  20.         #region IXmlSerializable Members
  21.  
  22.         public System.Xml.Schema.XmlSchema GetSchema() {
  23.             return null;
  24.         }
  25.  
  26.         public void ReadXml(System.Xml.XmlReader reader) {
  27.             XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
  28.             XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
  29.  
  30.             bool wasEmpty = reader.IsEmptyElement;
  31.  
  32.             reader.Read();
  33.  
  34.             if(wasEmpty)
  35.                 return;
  36.  
  37.             while(reader.NodeType != System.Xml.XmlNodeType.EndElement) {
  38.                 reader.ReadStartElement("item");
  39.                 reader.ReadStartElement("key");
  40.                 TKey key = (TKey)keySerializer.Deserialize(reader);
  41.                 reader.ReadEndElement();
  42.  
  43.                 reader.ReadStartElement("value");
  44.                 TValue value = (TValue)valueSerializer.Deserialize(reader);
  45.                 reader.ReadEndElement();
  46.  
  47.                 this.Add(key,value);
  48.  
  49.                 reader.ReadEndElement();
  50.                 reader.MoveToContent();
  51.             }
  52.  
  53.             reader.ReadEndElement();
  54.         }
  55.  
  56.         public void WriteXml(System.Xml.XmlWriter writer) {
  57.             XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
  58.             XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
  59.  
  60.             foreach(TKey key in this.Keys) {
  61.                 writer.WriteStartElement("item");
  62.  
  63.                 writer.WriteStartElement("key");
  64.                 keySerializer.Serialize(writer,key);
  65.                 writer.WriteEndElement();
  66.  
  67.                 writer.WriteStartElement("value");
  68.                 TValue value = this[key];
  69.                 valueSerializer.Serialize(writer,value);
  70.                 writer.WriteEndElement();
  71.  
  72.                 writer.WriteEndElement();
  73.             }
  74.         }
  75.  
  76.         #endregion
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment