Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections.Generic;
- using System.Xml.Serialization;
- namespace Core.Collections.Generic {
- [XmlRoot("dictionary")]
- public class SerializableDictionary<TKey,TValue>
- :Dictionary<TKey,TValue>,IXmlSerializable {
- #region Constructor
- public SerializableDictionary() {
- }
- public SerializableDictionary(IDictionary<TKey,TValue> dictionary)
- : base(dictionary) {
- }
- #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
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment