using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;

namespace ServerLib
{
 [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
 }
}

이전 1 ... 3 4 5 6 7 8 9 10 11 ... 162 다음