1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.IO;
6 using System.Xml;
7 using System.Xml.Schema;
8 using System.Xml.Serialization;
9 namespace SerialDict
10 {
11 [Serializable]
12 public class SerialDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
13 {
14 private string name;
15 public SerialDictionary()
16 {
17 this.name = "SerialDictionary";
18 }
19 public SerialDictionary(string name)
20 {
21 this.name = name;
22 }
23 public void WriteXml(XmlWriter write) // Serializer
24 {
25 XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey));
26 XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue));
27
28
29 write.WriteAttributeString("name", name);
30
31 write.WriteStartElement(name);
32 foreach (KeyValuePair<TKey, TValue> kv in this)
33 {
34 write.WriteStartElement("element");
35 write.WriteStartElement("key");
36 KeySerializer.Serialize(write, kv.Key);
37 write.WriteEndElement();
38 write.WriteStartElement("value");
39 ValueSerializer.Serialize(write, kv.Value);
40 write.WriteEndElement();
41 write.WriteEndElement();
42 }
43 write.WriteEndElement();
44 }
45 public void ReadXml(XmlReader reader) // Deserializer
46 {
47 reader.Read();
48 XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey));
49 XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue));
50
51 name = reader.Name;
52 reader.ReadStartElement(name);
53 while (reader.NodeType != XmlNodeType.EndElement)
54 {
55 reader.ReadStartElement("element");
56 reader.ReadStartElement("key");
57 TKey tk = (TKey)KeySerializer.Deserialize(reader);
58 reader.ReadEndElement();
59 reader.ReadStartElement("value");
60 TValue vl = (TValue)ValueSerializer.Deserialize(reader);
61 reader.ReadEndElement();
62 reader.ReadEndElement();
63
64 this.Add(tk, vl);
65 reader.MoveToContent();
66 }
67 reader.ReadEndElement();
68 reader.ReadEndElement();
69
70 }
71 public XmlSchema GetSchema()
72 {
73 return null;
74 }
75 }
76 class Program
77 {
78 static void Main(string[] args)
79 {
80 SerialDictionary<string, uint> sd = new SerialDictionary<string, uint>("modelNextIDs");
81 sd.Add("xxxx", 10);
82 sd.Add("xxxxx", 1);
83 sd.Add("xxxxxx", 1);
84 string fileName = "D:\\s.xml";
85 using (FileStream fileStream = new FileStream(fileName, FileMode.Create))
86 {
87 XmlSerializer xmlFormatter = new XmlSerializer(sd.GetType());
88 xmlFormatter.Serialize(fileStream, sd);
89 }
90
91 SerialDictionary<string, uint> sd2 = new SerialDictionary<string, uint>("modelNextIDs");
92 using (FileStream fileStream2 = new FileStream(fileName, FileMode.Open))
93 {
94 XmlSerializer xmlFormatter = new XmlSerializer(sd2.GetType());
95 sd2 = xmlFormatter.Deserialize(fileStream2) as SerialDictionary<string, uint>;
96 }
97 }
98 }
99 }