init
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace DTS.DASLib.Service
|
||||
{
|
||||
/// <summary>
|
||||
/// This is a simple serializable dictionary
|
||||
/// I'm using it for storing user attributes on slicepro/1.5 right now, but it's probably suitable for any dictionary
|
||||
/// that needs to be serialized
|
||||
/// </summary>
|
||||
/// <typeparam name="TKey"></typeparam>
|
||||
/// <typeparam name="TValue"></typeparam>
|
||||
[XmlRoot("SerializedDictionary")]
|
||||
public class SerializableDictionary<TKey, TValue>
|
||||
: Dictionary<TKey, TValue>, IXmlSerializable
|
||||
{
|
||||
#region IXmlSerializable Members
|
||||
public System.Xml.Schema.XmlSchema GetSchema()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public void ReadXml(System.Xml.XmlReader reader)
|
||||
{
|
||||
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
|
||||
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
|
||||
|
||||
bool wasEmpty = reader.IsEmptyElement;
|
||||
if (wasEmpty)
|
||||
return;
|
||||
|
||||
reader.Read();//document
|
||||
reader.ReadStartElement();//serializeddictionary
|
||||
|
||||
while (reader.NodeType != System.Xml.XmlNodeType.EndElement && reader.NodeType != System.Xml.XmlNodeType.None)
|
||||
{
|
||||
reader.ReadStartElement("Item");
|
||||
|
||||
reader.ReadStartElement("Key");
|
||||
TKey key = (TKey)keySerializer.Deserialize(reader);
|
||||
reader.ReadEndElement();
|
||||
|
||||
reader.ReadStartElement("Value");
|
||||
TValue value = (TValue)valueSerializer.Deserialize(reader);
|
||||
reader.ReadEndElement();
|
||||
|
||||
this.Add(key, value);
|
||||
|
||||
reader.ReadEndElement();
|
||||
reader.MoveToContent();
|
||||
}
|
||||
if (reader.NodeType != System.Xml.XmlNodeType.None)
|
||||
{
|
||||
reader.ReadEndElement();
|
||||
}
|
||||
}
|
||||
|
||||
public void WriteXml(System.Xml.XmlWriter writer)
|
||||
{
|
||||
writer.WriteStartDocument();
|
||||
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
|
||||
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
|
||||
writer.WriteStartElement("SerializedDictionary");
|
||||
foreach (TKey key in this.Keys)
|
||||
{
|
||||
writer.WriteStartElement("Item");
|
||||
|
||||
writer.WriteStartElement("Key");
|
||||
keySerializer.Serialize(writer, key);
|
||||
writer.WriteEndElement();//key
|
||||
|
||||
writer.WriteStartElement("Value");
|
||||
TValue value = this[key];
|
||||
valueSerializer.Serialize(writer, value);
|
||||
writer.WriteEndElement();//value
|
||||
|
||||
writer.WriteEndElement();//item
|
||||
writer.Flush();
|
||||
}
|
||||
writer.WriteEndElement();//SerializedDictionary
|
||||
writer.WriteEndDocument();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user