/WorldView/Structures/SerializableDictionary.cs
C# | 70 lines | 54 code | 15 blank | 1 comment | 3 complexity | d42385033385fd8e2f888b5973ef494c MD5 | raw file
- // Credit to http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx
-
- using System;
- using System.Collections.Generic;
- using System.Xml.Serialization;
-
- [XmlRoot("dictionary")]
- public class SerializableDictionary<TKey, TValue>
- : Dictionary<TKey, TValue>, IXmlSerializable
- {
- #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
- }