1/**////<summary>2///支持XML序列化的泛型Dictionary
3///</summary>4///<typeparamname="TKey"></typeparam>5///<typeparamname="TValue"></typeparam>
6[XmlRoot("dictionary")]
7publicclassSerializableDictionary<TKey,TValue>8:Dictionary<TKey,TValue>,IXmlSerializable
9{
10
#region 构造函数
public SerializableDictionary():base()
{
}
public SerializableDictionary(IDictionary<TKey, TValue> dictionary):base(dictionary)
{
}
public SerializableDictionary(IEqualityComparer<TKey> comparer):base(comparer)
{
}
public SerializableDictionary(int capacity):base(capacity)
{
}
public SerializableDictionary(int capacity, IEqualityComparer<TKey> comparer)
:base(capacity,comparer)
{
}
protected SerializableDictionary(SerializationInfo info, StreamingContext context):base(info,context)
{
}
#endregion
11IXmlSerializableMembers#regionIXmlSerializableMembers12publicSystem.Xml.Schema.XmlSchemaGetSchema()
13{
14returnnull;
15}16
17/**////<summary>18///从对象的XML表示形式生成该对象
19///</summary>20///<paramname="reader"></param>
21publicvoidReadXml(System.Xml.XmlReaderreader)
22{
23
24XmlSerializerkeySerializer=newXmlSerializer(typeof(TKey));
25XmlSerializervalueSerializer=newXmlSerializer(typeof(TValue));
26boolwasEmpty=reader.IsEmptyElement;
27reader.Read();
28
29if(wasEmpty)
30return;
31while(reader.NodeType!=System.Xml.XmlNodeType.EndElement)
32{
33reader.ReadStartElement("item");
34reader.ReadStartElement("key");
35TKeykey=(TKey)keySerializer.Deserialize(reader);
36reader.ReadEndElement();
37reader.ReadStartElement("value");
38TValuevalue=(TValue)valueSerializer.Deserialize(reader);
39reader.ReadEndElement();
40this.Add(key,value);
41reader.ReadEndElement();
42reader.MoveToContent();
43
44}45reader.ReadEndElement();
46
47}48
49
50/**////<summary>51///将对象转换为其XML表示形式
52///</summary>53///<paramname="writer"></param>
54publicvoidWriteXml(System.Xml.XmlWriterwriter)
55{
56
57XmlSerializerkeySerializer=newXmlSerializer(typeof(TKey));
58XmlSerializervalueSerializer=newXmlSerializer(typeof(TValue));
59foreach(TKeykeyinthis.Keys)
60{
61writer.WriteStartElement("item");
62writer.WriteStartElement("key");
63keySerializer.Serialize(writer,key);
64writer.WriteEndElement();
65writer.WriteStartElement("value");
66TValuevalue=this[key];
67valueSerializer.Serialize(writer,value);
68writer.WriteEndElement();
69writer.WriteEndElement();
70}71
72}73
74#endregion75
76}