wasSharp – Blame information for rev 39

Subversion Repositories:
Rev:
Rev Author Line No. Line
10 office 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. //
5 ///////////////////////////////////////////////////////////////////////////
6  
7 using System;
8 using System.Collections.Generic;
9 using System.IO;
10 using System.Xml;
11 using System.Xml.Schema;
12 using System.Xml.Serialization;
13  
14 namespace wasSharp.Collections.Generic
15 {
16 /// <summary>
17 /// A serializable dictionary class.
18 /// </summary>
19 /// <typeparam name="TKey">the key</typeparam>
20 /// <typeparam name="TValue">the value</typeparam>
21 public class SerializableDictionary<TKey, TValue>
22 : Dictionary<TKey, TValue>, IXmlSerializable
23 {
23 office 24 public XmlSchema GetSchema()
25 {
26 return null;
27 }
10 office 28  
23 office 29 public void ReadXml(XmlReader reader)
10 office 30 {
23 office 31 if (reader.IsEmptyElement)
10 office 32 {
23 office 33 return;
10 office 34 }
23 office 35  
36 reader.ReadStartElement();
37 while (!reader.NodeType.Equals(XmlNodeType.EndElement))
38 {
39 reader.ReadStartElement(ItemNodeName);
40  
41 reader.ReadStartElement(KeyNodeName);
27 office 42 var key = (TKey)KeySerializer.Deserialize(reader);
23 office 43 reader.ReadEndElement();
44  
45 reader.ReadStartElement(ValueNodeName);
27 office 46 var value = (TValue)ValueSerializer.Deserialize(reader);
23 office 47 reader.ReadEndElement();
48  
49 Add(key, value);
50  
51 reader.ReadEndElement();
52 reader.MoveToContent();
53 }
54 reader.ReadEndElement();
10 office 55 }
56  
23 office 57 public void WriteXml(XmlWriter writer)
10 office 58 {
23 office 59 foreach (var key in Keys)
60 {
61 writer.WriteStartElement(ItemNodeName);
62  
63 writer.WriteStartElement(KeyNodeName);
64 KeySerializer.Serialize(writer, key);
65 writer.WriteEndElement();
66  
67 writer.WriteStartElement(ValueNodeName);
68 ValueSerializer.Serialize(writer, this[key]);
69 writer.WriteEndElement();
70  
71 writer.WriteEndElement();
72 }
10 office 73 }
74  
23 office 75 #region Constants
10 office 76  
39 office 77 public readonly string DictionaryNodeName = @"Dictionary";
78 public readonly string ItemNodeName = @"Item";
79 public readonly string KeyNodeName = @"Key";
80 public readonly string ValueNodeName = @"Value";
10 office 81  
27 office 82 #endregion Constants
10 office 83  
23 office 84 #region Constructors
10 office 85  
23 office 86 public SerializableDictionary()
87 {
88 }
10 office 89  
23 office 90 public SerializableDictionary(IDictionary<TKey, TValue> dictionary)
91 : base(dictionary)
92 {
93 }
10 office 94  
23 office 95 public SerializableDictionary(IEqualityComparer<TKey> comparer)
96 : base(comparer)
97 {
98 }
10 office 99  
23 office 100 public SerializableDictionary(int capacity)
101 : base(capacity)
102 {
103 }
10 office 104  
23 office 105 public SerializableDictionary(IDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer)
106 : base(dictionary, comparer)
107 {
10 office 108 }
109  
23 office 110 public SerializableDictionary(int capacity, IEqualityComparer<TKey> comparer)
111 : base(capacity, comparer)
10 office 112 {
23 office 113 }
10 office 114  
27 office 115 #endregion Constructors
10 office 116  
23 office 117 #region Private Properties
10 office 118  
23 office 119 protected XmlSerializer ValueSerializer
120 => valueSerializer ?? (valueSerializer = new XmlSerializer(typeof(TValue)));
10 office 121  
23 office 122 private XmlSerializer KeySerializer => keySerializer ?? (keySerializer = new XmlSerializer(typeof(TKey)));
10 office 123  
27 office 124 #endregion Private Properties
23 office 125  
126 #region Private Members
127  
128 private XmlSerializer keySerializer;
129 private XmlSerializer valueSerializer;
130  
27 office 131 #endregion Private Members
10 office 132 }
27 office 133 }