wasSharp – Diff between revs 10 and 23

Subversion Repositories:
Rev:
Show entire fileRegard whitespace
Rev 10 Rev 23
Line 16... Line 16...
16 /// <summary> 16 /// <summary>
17 /// A serializable dictionary class. 17 /// A serializable dictionary class.
18 /// </summary> 18 /// </summary>
19 /// <typeparam name="TKey">the key</typeparam> 19 /// <typeparam name="TKey">the key</typeparam>
20 /// <typeparam name="TValue">the value</typeparam> 20 /// <typeparam name="TValue">the value</typeparam>
21 [XmlRoot("Dictionary")] -  
22 public class SerializableDictionary<TKey, TValue> 21 public class SerializableDictionary<TKey, TValue>
23 : Dictionary<TKey, TValue>, IXmlSerializable 22 : Dictionary<TKey, TValue>, IXmlSerializable
24 { 23 {
25 #region IXmlSerializable Members 24 public XmlSchema GetSchema()
-   25 {
-   26 return null;
-   27 }
Line 26... Line 28...
26   28  
27 public SerializableDictionary(IEnumerable<KeyValuePair<TKey, TValue>> kvp) 29 public void ReadXml(XmlReader reader)
28 { 30 {
29 foreach (var i in kvp) 31 if (reader.IsEmptyElement)
30 { 32 {
31 Add(i.Key, i.Value); 33 return;
-   34 }
-   35  
-   36 reader.ReadStartElement();
-   37 while (!reader.NodeType.Equals(XmlNodeType.EndElement))
-   38 {
-   39 reader.ReadStartElement(ItemNodeName);
-   40  
-   41 reader.ReadStartElement(KeyNodeName);
-   42 var key = (TKey) KeySerializer.Deserialize(reader);
-   43 reader.ReadEndElement();
-   44  
-   45 reader.ReadStartElement(ValueNodeName);
-   46 var value = (TValue) ValueSerializer.Deserialize(reader);
-   47 reader.ReadEndElement();
-   48  
-   49 Add(key, value);
-   50  
-   51 reader.ReadEndElement();
-   52 reader.MoveToContent();
-   53 }
32 } 54 reader.ReadEndElement();
Line 33... Line 55...
33 } 55 }
34   56  
-   57 public void WriteXml(XmlWriter writer)
-   58 {
-   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  
35 public SerializableDictionary() 71 writer.WriteEndElement();
Line 36... Line 72...
36 { 72 }
37 } 73 }
38   74  
Line 43... Line 79...
43 public SerializableDictionary<TKey, TValue> Clone() 79 public SerializableDictionary<TKey, TValue> Clone()
44 { 80 {
45 SerializableDictionary<TKey, TValue> clone; 81 SerializableDictionary<TKey, TValue> clone;
46 try 82 try
47 { 83 {
48 using (var writer = new MemoryStream()) 84 using (var memoryStream = new MemoryStream())
49 { 85 {
50 var serializer = -  
51 new XmlSerializer( 86 new XmlSerializer(
52 typeof(SerializableDictionary<TKey, TValue>)); 87 typeof(SerializableDictionary<TKey, TValue>), new XmlRootAttribute(DictionaryNodeName))
53 serializer.Serialize(writer, this); 88 .Serialize(memoryStream, this);
54 writer.Seek(0, SeekOrigin.Begin); 89 memoryStream.Seek(0, SeekOrigin.Begin);
55 clone = (SerializableDictionary<TKey, TValue>) 90 clone = (SerializableDictionary<TKey, TValue>)
56 new XmlSerializer( 91 new XmlSerializer(
57 typeof(SerializableDictionary<TKey, TValue>)) 92 typeof(SerializableDictionary<TKey, TValue>), new XmlRootAttribute(DictionaryNodeName))
58 .Deserialize(writer); 93 .Deserialize(memoryStream);
59 } 94 }
60 } 95 }
61 /* cloning failed so return an empty dictionary */ 96 /* cloning failed so return an empty dictionary */
62 catch (Exception) 97 catch (Exception)
63 { 98 {
64 clone = new SerializableDictionary<TKey, TValue>(); 99 clone = new SerializableDictionary<TKey, TValue>();
65 } 100 }
66 return clone; 101 return clone;
67 } 102 }
Line 68... Line -...
68   -  
69 public XmlSchema GetSchema() -  
70 { 103  
71 return null; -  
Line 72... Line 104...
72 } 104 #region Constants
73   105  
74 public void ReadXml(XmlReader reader) 106 public string DictionaryNodeName { get; set; } = "Dictionary";
75 { 107 public string ItemNodeName { get; set; } = "Item";
Line 76... Line -...
76 var keySerializer = new XmlSerializer(typeof(TKey)); -  
77 var valueSerializer = new XmlSerializer(typeof(TValue)); 108 public string KeyNodeName { get; set; } = "Key";
Line 78... Line 109...
78   109 public string ValueNodeName { get; set; } = "Value";
79 var wasEmpty = reader.IsEmptyElement; -  
Line 80... Line 110...
80 reader.Read(); 110  
81   111 #endregion
82 if (wasEmpty) -  
83 return; -  
84   -  
85 while (!reader.NodeType.Equals(XmlNodeType.EndElement)) -  
86 { 112  
87 reader.ReadStartElement("Item"); -  
88   -  
89 reader.ReadStartElement("Key"); -  
90 var key = (TKey) keySerializer.Deserialize(reader); -  
Line -... Line 113...
-   113 #region Constructors
91 reader.ReadEndElement(); 114  
-   115 public SerializableDictionary()
-   116 {
Line 92... Line 117...
92   117 }
93 reader.ReadStartElement("Value"); 118  
-   119 public SerializableDictionary(IDictionary<TKey, TValue> dictionary)
94 var value = (TValue) valueSerializer.Deserialize(reader); 120 : base(dictionary)
-   121 {
-   122 }
95 reader.ReadEndElement(); 123  
-   124 public SerializableDictionary(IEqualityComparer<TKey> comparer)
96   125 : base(comparer)
Line -... Line 126...
-   126 {
97 Add(key, value); 127 }
98   128  
99 reader.ReadEndElement(); 129 public SerializableDictionary(int capacity)
100 reader.MoveToContent(); -  
Line -... Line 130...
-   130 : base(capacity)
101 } 131 {
102 reader.ReadEndElement(); 132 }
103 } 133  
Line 104... Line -...
104   -  
105 public void WriteXml(XmlWriter writer) -  
106 { 134 public SerializableDictionary(IDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer)
Line 107... Line -...
107 var keySerializer = new XmlSerializer(typeof(TKey)); -  
108 var valueSerializer = new XmlSerializer(typeof(TValue)); 135 : base(dictionary, comparer)
109   -  
110 foreach (var key in Keys) -  
Line 111... Line 136...
111 { 136 {
-   137 }
-   138  
-   139 public SerializableDictionary(int capacity, IEqualityComparer<TKey> comparer)
-   140 : base(capacity, comparer)
112 writer.WriteStartElement("Item"); 141 {
-   142 }
113   143  
-   144 #endregion
-   145  
-   146 #region Private Properties
Line 114... Line 147...
114 writer.WriteStartElement("Key"); 147  
115 keySerializer.Serialize(writer, key); 148 protected XmlSerializer ValueSerializer
116 writer.WriteEndElement(); 149 => valueSerializer ?? (valueSerializer = new XmlSerializer(typeof(TValue)));
117   150