1
2
3 using System;
4
5 using System.Collections.Generic;
6
7 using System.Text;
8
9 using System.Xml.Serialization;
10
11
12
13 [XmlRoot("dictionary")]
14
15 public class SerializableDictionary<TKey, TValue>
16
17 : Dictionary<TKey, TValue>, IXmlSerializable
18
19 {
20 #region IXmlSerializable Members ...
21
22
23 public System.Xml.Schema.XmlSchema GetSchema()
24
25 {
26
27 return null;
28
29 }
30
31
32
33 public void ReadXml(System.Xml.XmlReader reader)
34
35 {
36
37 XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
38
39 XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
40
41
42
43 bool wasEmpty = reader.IsEmptyElement;
44
45 reader.Read();
46
47
48
49 if (wasEmpty)
50
51 return;
52
53
54
55 while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
56
57 {
58
59 reader.ReadStartElement("item");
60
61
62
63 reader.ReadStartElement("key");
64
65 TKey key = (TKey)keySerializer.Deserialize(reader);
66
67 reader.ReadEndElement();
68
69
70
71 reader.ReadStartElement("value");
72
73 TValue value = (TValue)valueSerializer.Deserialize(reader);
74
75 reader.ReadEndElement();
76
77
78
79 this.Add(key, value);
80
81
82
83 reader.ReadEndElement();
84
85 reader.MoveToContent();
86
87 }
88
89 reader.ReadEndElement();
90
91 }
92
93
94
95 public void WriteXml(System.Xml.XmlWriter writer)
96
97 {
98
99 XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
100
101 XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
102
103
104
105 foreach (TKey key in this.Keys)
106
107 {
108
109 writer.WriteStartElement("item");
110
111
112
113 writer.WriteStartElement("key");
114
115 keySerializer.Serialize(writer, key);
116
117 writer.WriteEndElement();
118
119
120
121 writer.WriteStartElement("value");
122
123 TValue value = this[key];
124
125 valueSerializer.Serialize(writer, value);
126
127 writer.WriteEndElement();
128
129
130
131 writer.WriteEndElement();
132
133 }
134
135 }
136 #endregion
137
138 }
139
140