1 | using System;
|
---|
2 | using System.Collections;
|
---|
3 | using System.Xml;
|
---|
4 | using System.Xml.Serialization;
|
---|
5 | using System.IO;
|
---|
6 | using System.Xml.Schema;
|
---|
7 | namespace Netron.GraphLib.IO.NML
|
---|
8 | {
|
---|
9 | class DictionarySerializer : IXmlSerializable
|
---|
10 | {
|
---|
11 | private IDictionary dictionary;
|
---|
12 |
|
---|
13 | public DictionarySerializer()
|
---|
14 | {
|
---|
15 | this.dictionary = new Hashtable();
|
---|
16 | }
|
---|
17 |
|
---|
18 | private DictionarySerializer(IDictionary dictionary)
|
---|
19 | {
|
---|
20 | this.dictionary = dictionary;
|
---|
21 | }
|
---|
22 |
|
---|
23 | public static void Serialize(IDictionary dictionary, Stream stream)
|
---|
24 | {
|
---|
25 | DictionarySerializer ds = new DictionarySerializer(dictionary);
|
---|
26 | XmlSerializer xs = new XmlSerializer(typeof(DictionarySerializer));
|
---|
27 | xs.Serialize(stream, ds);
|
---|
28 | }
|
---|
29 |
|
---|
30 | public static IDictionary Deserialize(Stream stream)
|
---|
31 | {
|
---|
32 | XmlSerializer xs = new XmlSerializer(typeof(DictionarySerializer));
|
---|
33 | DictionarySerializer ds = (DictionarySerializer)xs.Deserialize(stream);
|
---|
34 | return ds.dictionary;
|
---|
35 | }
|
---|
36 |
|
---|
37 | XmlSchema IXmlSerializable.GetSchema()
|
---|
38 | {
|
---|
39 | return null;
|
---|
40 | }
|
---|
41 |
|
---|
42 | void IXmlSerializable.ReadXml(XmlReader reader)
|
---|
43 | {
|
---|
44 | reader.Read();
|
---|
45 | reader.ReadStartElement("dictionary");
|
---|
46 | while (reader.NodeType != XmlNodeType.EndElement)
|
---|
47 | {
|
---|
48 | reader.ReadStartElement("item");
|
---|
49 | string key = reader.ReadElementString("key");
|
---|
50 | string value = reader.ReadElementString("value");
|
---|
51 | reader.ReadEndElement();
|
---|
52 | reader.MoveToContent();
|
---|
53 | dictionary.Add(key, value);
|
---|
54 | }
|
---|
55 | reader.ReadEndElement();
|
---|
56 | }
|
---|
57 |
|
---|
58 | void IXmlSerializable.WriteXml(XmlWriter writer)
|
---|
59 | {
|
---|
60 | writer.WriteStartElement("dictionary");
|
---|
61 | foreach (object key in dictionary.Keys)
|
---|
62 | {
|
---|
63 | object value = dictionary[key];
|
---|
64 | writer.WriteStartElement("item");
|
---|
65 | writer.WriteElementString("key", key.ToString());
|
---|
66 | writer.WriteElementString("value", value.ToString());
|
---|
67 | writer.WriteEndElement();
|
---|
68 | }
|
---|
69 | writer.WriteEndElement();
|
---|
70 | }
|
---|
71 | }
|
---|
72 | }
|
---|