/wasSharp/Collections.cs |
@@ -4,7 +4,9 @@ |
// rights of fair usage, the disclaimer and warranty conditions. // |
/////////////////////////////////////////////////////////////////////////// |
|
using System; |
using System.Collections.Generic; |
using System.IO; |
using System.Xml; |
using System.Xml.Schema; |
using System.Xml.Serialization; |
@@ -11,7 +13,7 @@ |
|
namespace wasSharp |
{ |
public class Collections |
public static class Collections |
{ |
/// <summary> |
/// A serializable dictionary class. |
@@ -24,6 +26,48 @@ |
{ |
#region IXmlSerializable Members |
|
public SerializableDictionary(IEnumerable<KeyValuePair<TKey, TValue>> kvp) |
{ |
foreach (var i in kvp) |
{ |
Add(i.Key, i.Value); |
} |
} |
|
public SerializableDictionary() |
{ |
} |
|
/// <summary> |
/// Deep-clones the serializable dictionary. |
/// </summary> |
/// <returns>a deep clone of the original dictionary</returns> |
public SerializableDictionary<TKey, TValue> Clone() |
{ |
SerializableDictionary<TKey, TValue> clone; |
try |
{ |
using (var writer = new MemoryStream()) |
{ |
var serializer = |
new XmlSerializer( |
typeof (SerializableDictionary<TKey, TValue>)); |
serializer.Serialize(writer, this); |
writer.Seek(0, SeekOrigin.Begin); |
clone = (SerializableDictionary<TKey, TValue>) |
new XmlSerializer( |
typeof (SerializableDictionary<TKey, TValue>)) |
.Deserialize(writer); |
} |
} |
/* cloning failed so return an empty dictionary */ |
catch (Exception) |
{ |
clone = new SerializableDictionary<TKey, TValue>(); |
} |
return clone; |
} |
|
public XmlSchema GetSchema() |
{ |
return null; |
@@ -31,25 +75,25 @@ |
|
public void ReadXml(XmlReader reader) |
{ |
XmlSerializer keySerializer = new XmlSerializer(typeof (TKey)); |
XmlSerializer valueSerializer = new XmlSerializer(typeof (TValue)); |
var keySerializer = new XmlSerializer(typeof (TKey)); |
var valueSerializer = new XmlSerializer(typeof (TValue)); |
|
bool wasEmpty = reader.IsEmptyElement; |
var wasEmpty = reader.IsEmptyElement; |
reader.Read(); |
|
if (wasEmpty) |
return; |
|
while (reader.NodeType != XmlNodeType.EndElement) |
while (!reader.NodeType.Equals(XmlNodeType.EndElement)) |
{ |
reader.ReadStartElement("Item"); |
|
reader.ReadStartElement("Key"); |
TKey key = (TKey) keySerializer.Deserialize(reader); |
var key = (TKey) keySerializer.Deserialize(reader); |
reader.ReadEndElement(); |
|
reader.ReadStartElement("Value"); |
TValue value = (TValue) valueSerializer.Deserialize(reader); |
var value = (TValue) valueSerializer.Deserialize(reader); |
reader.ReadEndElement(); |
|
Add(key, value); |
@@ -62,10 +106,10 @@ |
|
public void WriteXml(XmlWriter writer) |
{ |
XmlSerializer keySerializer = new XmlSerializer(typeof (TKey)); |
XmlSerializer valueSerializer = new XmlSerializer(typeof (TValue)); |
var keySerializer = new XmlSerializer(typeof (TKey)); |
var valueSerializer = new XmlSerializer(typeof (TValue)); |
|
foreach (TKey key in Keys) |
foreach (var key in Keys) |
{ |
writer.WriteStartElement("Item"); |
|
@@ -74,7 +118,7 @@ |
writer.WriteEndElement(); |
|
writer.WriteStartElement("Value"); |
TValue value = this[key]; |
var value = this[key]; |
valueSerializer.Serialize(writer, value); |
writer.WriteEndElement(); |
|