summaryrefslogtreecommitdiffstats
path: root/win/CS/HandBrake.ApplicationServices/Collections/SerializableDictionary.cs
diff options
context:
space:
mode:
Diffstat (limited to 'win/CS/HandBrake.ApplicationServices/Collections/SerializableDictionary.cs')
-rw-r--r--win/CS/HandBrake.ApplicationServices/Collections/SerializableDictionary.cs103
1 files changed, 103 insertions, 0 deletions
diff --git a/win/CS/HandBrake.ApplicationServices/Collections/SerializableDictionary.cs b/win/CS/HandBrake.ApplicationServices/Collections/SerializableDictionary.cs
new file mode 100644
index 000000000..b492bc2f0
--- /dev/null
+++ b/win/CS/HandBrake.ApplicationServices/Collections/SerializableDictionary.cs
@@ -0,0 +1,103 @@
+/* SerializableDictionary.cs $
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr>.
+ It may be used under the terms of the GNU General Public License. */
+
+namespace HandBrake.ApplicationServices.Collections
+{
+ using System.Collections.Generic;
+ using System.Runtime.Serialization;
+ using System.Xml.Serialization;
+
+ /// <summary>
+ /// A Serializable Dictionary
+ /// </summary>
+ /// <typeparam name="TKey">
+ /// The Key Type
+ /// </typeparam>
+ /// <typeparam name="TValue">
+ /// The Value Type
+ /// </typeparam>
+ [XmlRoot("dictionary")]
+ public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
+ {
+ #region IXmlSerializable Members
+
+ /// <summary>
+ /// Get the Schema
+ /// </summary>
+ /// <returns>
+ /// Nothing. We don't use this.
+ /// </returns>
+ public System.Xml.Schema.XmlSchema GetSchema()
+ {
+ return null;
+ }
+
+ /// <summary>
+ /// Deserialize some XML into a dictionary
+ /// </summary>
+ /// <param name="reader">
+ /// The reader.
+ /// </param>
+ public void ReadXml(System.Xml.XmlReader reader)
+ {
+ XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
+ XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
+
+ bool wasEmpty = reader.IsEmptyElement;
+ reader.Read();
+
+ if (wasEmpty)
+ return;
+
+ while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
+ {
+ 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();
+ }
+ reader.ReadEndElement();
+ }
+
+ /// <summary>
+ /// Write the Dictionary out to XML
+ /// </summary>
+ /// <param name="writer">
+ /// The writer.
+ /// </param>
+ public void WriteXml(System.Xml.XmlWriter writer)
+ {
+ XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
+ XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
+
+ foreach (TKey key in this.Keys)
+ {
+ writer.WriteStartElement("item");
+
+ writer.WriteStartElement("key");
+ keySerializer.Serialize(writer, key);
+ writer.WriteEndElement();
+
+ writer.WriteStartElement("value");
+ TValue value = this[key];
+ valueSerializer.Serialize(writer, value);
+ writer.WriteEndElement();
+
+ writer.WriteEndElement();
+ }
+ }
+ #endregion
+ }
+}