usingSystem;usingSystem.Collections.Generic;usingSystem.Runtime.Serialization;usingSystem.Xml;usingSystem.Xml.Schema;usingSystem.Xml.Serialization;namespaceSerializableDictionary
{
[XmlRoot("dictionary"), Serializable]public class SerializableDictionary: Dictionary, IXmlSerializable
{publicSerializableDictionary()
{
}public SerializableDictionary(IDictionarydictionary)
:base(dictionary)
{
}public SerializableDictionary(IEqualityComparercomparer)
:base(comparer)
{
}public SerializableDictionary(intcapacity)
:base(capacity)
{
}public SerializableDictionary(int capacity, IEqualityComparercomparer)
:base(capacity, comparer)
{
}protectedSerializableDictionary(SerializationInfo info, StreamingContext context)
:base(info, context)
{
}#region IXmlSerializable Members
publicXmlSchema GetSchema()
{return null;
}///
///从对象的 XML 表示形式生成该对象///
///
public voidReadXml(XmlReader reader)
{var keySerializer = new XmlSerializer(typeof(TKey));var valueSerializer = new XmlSerializer(typeof(TValue));bool wasEmpty =reader.IsEmptyElement;
reader.Read();if(wasEmpty)return;while (reader.NodeType !=XmlNodeType.EndElement)
{
reader.ReadStartElement("item");
reader.ReadStartElement("key");var key =(TKey)keySerializer.Deserialize(reader);
reader.ReadEndElement();
reader.ReadStartElement("value");var value =(TValue)valueSerializer.Deserialize(reader);
reader.ReadEndElement();
Add(key, value);
reader.ReadEndElement();
reader.MoveToContent();
}
reader.ReadEndElement();
}///
///将对象转换为其 XML 表示形式///
///
public voidWriteXml(XmlWriter writer)
{var keySerializer = new XmlSerializer(typeof(TKey));var valueSerializer = new XmlSerializer(typeof(TValue));foreach (TKey key inKeys)
{
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}
}