Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/WindowsFormsApplication2/WindowsFormsApplication2/ObjectXMLSerializer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'WindowsFormsApplication2/WindowsFormsApplication2/ObjectXMLSerializer.cs')
-rw-r--r--WindowsFormsApplication2/WindowsFormsApplication2/ObjectXMLSerializer.cs399
1 files changed, 399 insertions, 0 deletions
diff --git a/WindowsFormsApplication2/WindowsFormsApplication2/ObjectXMLSerializer.cs b/WindowsFormsApplication2/WindowsFormsApplication2/ObjectXMLSerializer.cs
new file mode 100644
index 0000000..835fb89
--- /dev/null
+++ b/WindowsFormsApplication2/WindowsFormsApplication2/ObjectXMLSerializer.cs
@@ -0,0 +1,399 @@
+using System;
+using System.Xml.Serialization; // For serialization of an object to an XML Document file.
+using System.Runtime.Serialization.Formatters.Binary; // For serialization of an object to an XML Binary file.
+using System.IO; // For reading/writing data to an XML file.
+using System.IO.IsolatedStorage; // For accessing user isolated data.
+using System.Collections.Generic;
+
+namespace disc1.XML
+{
+ /// <summary>
+ /// Serialization format types.
+ /// </summary>
+ public enum SerializedFormat
+ {
+ /// <summary>
+ /// Binary serialization format.
+ /// </summary>
+ Binary,
+
+ /// <summary>
+ /// Document serialization format.
+ /// </summary>
+ Document
+ }
+
+ /// <summary>
+ /// Facade to XML serialization and deserialization of strongly typed objects to/from an XML file.
+ ///
+ /// References: XML Serialization at http://samples.gotdotnet.com/:
+ /// http://samples.gotdotnet.com/QuickStart/howto/default.aspx?url=/quickstart/howto/doc/xmlserialization/rwobjfromxml.aspx
+ /// </summary>
+ public static class ObjectXMLSerializer<T> where T : class // Specify that T must be a class.
+ {
+ #region Load methods
+
+ /// <summary>
+ /// Loads an object from an XML file in Document format.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// serializableObject = ObjectXMLSerializer&lt;SerializableObject&gt;.Load(@"C:\XMLObjects.xml");
+ /// </code>
+ /// </example>
+ /// <param name="path">Path of the file to load the object from.</param>
+ /// <returns>Object loaded from an XML file in Document format.</returns>
+ public static T Load(string path)
+ {
+ T serializableObject = LoadFromDocumentFormat(null, path, null);
+ return serializableObject;
+ }
+
+ /// <summary>
+ /// Loads an object from an XML file using a specified serialized format.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// serializableObject = ObjectXMLSerializer&lt;SerializableObject&gt;.Load(@"C:\XMLObjects.xml", SerializedFormat.Binary);
+ /// </code>
+ /// </example>
+ /// <param name="path">Path of the file to load the object from.</param>
+ /// <param name="serializedFormat">XML serialized format used to load the object.</param>
+ /// <returns>Object loaded from an XML file using the specified serialized format.</returns>
+ public static T Load(string path, SerializedFormat serializedFormat)
+ {
+ T serializableObject = null;
+
+ switch (serializedFormat)
+ {
+ case SerializedFormat.Binary:
+ serializableObject = LoadFromBinaryFormat(path, null);
+ break;
+
+ case SerializedFormat.Document:
+ default:
+ serializableObject = LoadFromDocumentFormat(null, path, null);
+ break;
+ }
+
+ return serializableObject;
+ }
+
+ /// <summary>
+ /// Loads an object from an XML file in Document format, supplying extra data types to enable deserialization of custom types within the object.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// serializableObject = ObjectXMLSerializer&lt;SerializableObject&gt;.Load(@"C:\XMLObjects.xml", new Type[] { typeof(MyCustomType) });
+ /// </code>
+ /// </example>
+ /// <param name="path">Path of the file to load the object from.</param>
+ /// <param name="extraTypes">Extra data types to enable deserialization of custom types within the object.</param>
+ /// <returns>Object loaded from an XML file in Document format.</returns>
+ public static T Load(string path, System.Type[] extraTypes)
+ {
+ T serializableObject = LoadFromDocumentFormat(extraTypes, path, null);
+ return serializableObject;
+ }
+
+ /// <summary>
+ /// Loads an object from an XML file in Document format, located in a specified isolated storage area.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// serializableObject = ObjectXMLSerializer&lt;SerializableObject&gt;.Load("XMLObjects.xml", IsolatedStorageFile.GetUserStoreForAssembly());
+ /// </code>
+ /// </example>
+ /// <param name="fileName">Name of the file in the isolated storage area to load the object from.</param>
+ /// <param name="isolatedStorageDirectory">Isolated storage area directory containing the XML file to load the object from.</param>
+ /// <returns>Object loaded from an XML file in Document format located in a specified isolated storage area.</returns>
+ public static T Load(string fileName, IsolatedStorageFile isolatedStorageDirectory)
+ {
+ T serializableObject = LoadFromDocumentFormat(null, fileName, isolatedStorageDirectory);
+ return serializableObject;
+ }
+
+ /// <summary>
+ /// Loads an object from an XML file located in a specified isolated storage area, using a specified serialized format.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// serializableObject = ObjectXMLSerializer&lt;SerializableObject&gt;.Load("XMLObjects.xml", IsolatedStorageFile.GetUserStoreForAssembly(), SerializedFormat.Binary);
+ /// </code>
+ /// </example>
+ /// <param name="fileName">Name of the file in the isolated storage area to load the object from.</param>
+ /// <param name="isolatedStorageDirectory">Isolated storage area directory containing the XML file to load the object from.</param>
+ /// <param name="serializedFormat">XML serialized format used to load the object.</param>
+ /// <returns>Object loaded from an XML file located in a specified isolated storage area, using a specified serialized format.</returns>
+ public static T Load(string fileName, IsolatedStorageFile isolatedStorageDirectory, SerializedFormat serializedFormat)
+ {
+ T serializableObject = null;
+
+ switch (serializedFormat)
+ {
+ case SerializedFormat.Binary:
+ serializableObject = LoadFromBinaryFormat(fileName, isolatedStorageDirectory);
+ break;
+
+ case SerializedFormat.Document:
+ default:
+ serializableObject = LoadFromDocumentFormat(null, fileName, isolatedStorageDirectory);
+ break;
+ }
+
+ return serializableObject;
+ }
+
+ /// <summary>
+ /// Loads an object from an XML file in Document format, located in a specified isolated storage area, and supplying extra data types to enable deserialization of custom types within the object.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// serializableObject = ObjectXMLSerializer&lt;SerializableObject&gt;.Load("XMLObjects.xml", IsolatedStorageFile.GetUserStoreForAssembly(), new Type[] { typeof(MyCustomType) });
+ /// </code>
+ /// </example>
+ /// <param name="fileName">Name of the file in the isolated storage area to load the object from.</param>
+ /// <param name="isolatedStorageDirectory">Isolated storage area directory containing the XML file to load the object from.</param>
+ /// <param name="extraTypes">Extra data types to enable deserialization of custom types within the object.</param>
+ /// <returns>Object loaded from an XML file located in a specified isolated storage area, using a specified serialized format.</returns>
+ public static T Load(string fileName, IsolatedStorageFile isolatedStorageDirectory, System.Type[] extraTypes)
+ {
+ T serializableObject = LoadFromDocumentFormat(null, fileName, isolatedStorageDirectory);
+ return serializableObject;
+ }
+
+ #endregion
+
+ #region Save methods
+
+ /// <summary>
+ /// Saves an object to an XML file in Document format.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// SerializableObject serializableObject = new SerializableObject();
+ ///
+ /// ObjectXMLSerializer&lt;SerializableObject&gt;.Save(serializableObject, @"C:\XMLObjects.xml");
+ /// </code>
+ /// </example>
+ /// <param name="serializableObject">Serializable object to be saved to file.</param>
+ /// <param name="path">Path of the file to save the object to.</param>
+ public static void Save(T serializableObject, string path)
+ {
+ SaveToDocumentFormat(serializableObject, null, path, null);
+ }
+
+ /// <summary>
+ /// Saves an object to an XML file using a specified serialized format.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// SerializableObject serializableObject = new SerializableObject();
+ ///
+ /// ObjectXMLSerializer&lt;SerializableObject&gt;.Save(serializableObject, @"C:\XMLObjects.xml", SerializedFormat.Binary);
+ /// </code>
+ /// </example>
+ /// <param name="serializableObject">Serializable object to be saved to file.</param>
+ /// <param name="path">Path of the file to save the object to.</param>
+ /// <param name="serializedFormat">XML serialized format used to save the object.</param>
+ public static void Save(T serializableObject, string path, SerializedFormat serializedFormat)
+ {
+ switch (serializedFormat)
+ {
+ case SerializedFormat.Binary:
+ SaveToBinaryFormat(serializableObject, path, null);
+ break;
+
+ case SerializedFormat.Document:
+ default:
+ SaveToDocumentFormat(serializableObject, null, path, null);
+ break;
+ }
+ }
+
+ /// <summary>
+ /// Saves an object to an XML file in Document format, supplying extra data types to enable serialization of custom types within the object.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// SerializableObject serializableObject = new SerializableObject();
+ ///
+ /// ObjectXMLSerializer&lt;SerializableObject&gt;.Save(serializableObject, @"C:\XMLObjects.xml", new Type[] { typeof(MyCustomType) });
+ /// </code>
+ /// </example>
+ /// <param name="serializableObject">Serializable object to be saved to file.</param>
+ /// <param name="path">Path of the file to save the object to.</param>
+ /// <param name="extraTypes">Extra data types to enable serialization of custom types within the object.</param>
+ public static void Save(T serializableObject, string path, System.Type[] extraTypes)
+ {
+ SaveToDocumentFormat(serializableObject, extraTypes, path, null);
+ }
+
+ /// <summary>
+ /// Saves an object to an XML file in Document format, located in a specified isolated storage area.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// SerializableObject serializableObject = new SerializableObject();
+ ///
+ /// ObjectXMLSerializer&lt;SerializableObject&gt;.Save(serializableObject, "XMLObjects.xml", IsolatedStorageFile.GetUserStoreForAssembly());
+ /// </code>
+ /// </example>
+ /// <param name="serializableObject">Serializable object to be saved to file.</param>
+ /// <param name="fileName">Name of the file in the isolated storage area to save the object to.</param>
+ /// <param name="isolatedStorageDirectory">Isolated storage area directory containing the XML file to save the object to.</param>
+ public static void Save(T serializableObject, string fileName, IsolatedStorageFile isolatedStorageDirectory)
+ {
+ SaveToDocumentFormat(serializableObject, null, fileName, isolatedStorageDirectory);
+ }
+
+ /// <summary>
+ /// Saves an object to an XML file located in a specified isolated storage area, using a specified serialized format.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// SerializableObject serializableObject = new SerializableObject();
+ ///
+ /// ObjectXMLSerializer&lt;SerializableObject&gt;.Save(serializableObject, "XMLObjects.xml", IsolatedStorageFile.GetUserStoreForAssembly(), SerializedFormat.Binary);
+ /// </code>
+ /// </example>
+ /// <param name="serializableObject">Serializable object to be saved to file.</param>
+ /// <param name="fileName">Name of the file in the isolated storage area to save the object to.</param>
+ /// <param name="isolatedStorageDirectory">Isolated storage area directory containing the XML file to save the object to.</param>
+ /// <param name="serializedFormat">XML serialized format used to save the object.</param>
+ public static void Save(T serializableObject, string fileName, IsolatedStorageFile isolatedStorageDirectory, SerializedFormat serializedFormat)
+ {
+ switch (serializedFormat)
+ {
+ case SerializedFormat.Binary:
+ SaveToBinaryFormat(serializableObject, fileName, isolatedStorageDirectory);
+ break;
+
+ case SerializedFormat.Document:
+ default:
+ SaveToDocumentFormat(serializableObject, null, fileName, isolatedStorageDirectory);
+ break;
+ }
+ }
+
+ /// <summary>
+ /// Saves an object to an XML file in Document format, located in a specified isolated storage area, and supplying extra data types to enable serialization of custom types within the object.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// SerializableObject serializableObject = new SerializableObject();
+ ///
+ /// ObjectXMLSerializer&lt;SerializableObject&gt;.Save(serializableObject, "XMLObjects.xml", IsolatedStorageFile.GetUserStoreForAssembly(), new Type[] { typeof(MyCustomType) });
+ /// </code>
+ /// </example>
+ /// <param name="serializableObject">Serializable object to be saved to file.</param>
+ /// <param name="fileName">Name of the file in the isolated storage area to save the object to.</param>
+ /// <param name="isolatedStorageDirectory">Isolated storage area directory containing the XML file to save the object to.</param>
+ /// <param name="extraTypes">Extra data types to enable serialization of custom types within the object.</param>
+ public static void Save(T serializableObject, string fileName, IsolatedStorageFile isolatedStorageDirectory, System.Type[] extraTypes)
+ {
+ SaveToDocumentFormat(serializableObject, null, fileName, isolatedStorageDirectory);
+ }
+
+ #endregion
+
+ #region Private
+
+ private static FileStream CreateFileStream(IsolatedStorageFile isolatedStorageFolder, string path)
+ {
+ FileStream fileStream = null;
+
+ if (isolatedStorageFolder == null)
+ fileStream = new FileStream(path, FileMode.OpenOrCreate);
+ else
+ fileStream = new IsolatedStorageFileStream(path, FileMode.OpenOrCreate, isolatedStorageFolder);
+
+ return fileStream;
+ }
+
+ private static T LoadFromBinaryFormat(string path, IsolatedStorageFile isolatedStorageFolder)
+ {
+ T serializableObject = null;
+
+ using (FileStream fileStream = CreateFileStream(isolatedStorageFolder, path))
+ {
+ BinaryFormatter binaryFormatter = new BinaryFormatter();
+ serializableObject = binaryFormatter.Deserialize(fileStream) as T;
+ }
+
+ return serializableObject;
+ }
+
+ private static T LoadFromDocumentFormat(System.Type[] extraTypes, string path, IsolatedStorageFile isolatedStorageFolder)
+ {
+ T serializableObject = null;
+
+ using (TextReader textReader = CreateTextReader(isolatedStorageFolder, path))
+ {
+ XmlSerializer xmlSerializer = CreateXmlSerializer(extraTypes);
+ serializableObject = xmlSerializer.Deserialize(textReader) as T;
+
+ }
+
+ return serializableObject;
+ }
+
+ private static TextReader CreateTextReader(IsolatedStorageFile isolatedStorageFolder, string path)
+ {
+ TextReader textReader = null;
+
+ if (isolatedStorageFolder == null)
+ textReader = new StreamReader(path);
+ else
+ textReader = new StreamReader(new IsolatedStorageFileStream(path, FileMode.Open, isolatedStorageFolder));
+
+ return textReader;
+ }
+
+ private static TextWriter CreateTextWriter(IsolatedStorageFile isolatedStorageFolder, string path)
+ {
+ TextWriter textWriter = null;
+
+ if (isolatedStorageFolder == null)
+ textWriter = new StreamWriter(path);
+ else
+ textWriter = new StreamWriter(new IsolatedStorageFileStream(path, FileMode.OpenOrCreate, isolatedStorageFolder));
+
+ return textWriter;
+ }
+
+ private static XmlSerializer CreateXmlSerializer(System.Type[] extraTypes)
+ {
+ Type ObjectType = typeof(T);
+
+ XmlSerializer xmlSerializer = null;
+
+ if (extraTypes != null)
+ xmlSerializer = new XmlSerializer(ObjectType, extraTypes);
+ else
+ xmlSerializer = new XmlSerializer(ObjectType);
+
+ return xmlSerializer;
+ }
+
+ private static void SaveToDocumentFormat(T serializableObject, System.Type[] extraTypes, string path, IsolatedStorageFile isolatedStorageFolder)
+ {
+ using (TextWriter textWriter = CreateTextWriter(isolatedStorageFolder, path))
+ {
+ XmlSerializer xmlSerializer = CreateXmlSerializer(extraTypes);
+ xmlSerializer.Serialize(textWriter, serializableObject);
+ }
+ }
+
+ private static void SaveToBinaryFormat(T serializableObject, string path, IsolatedStorageFile isolatedStorageFolder)
+ {
+ using (FileStream fileStream = CreateFileStream(isolatedStorageFolder, path))
+ {
+ BinaryFormatter binaryFormatter = new BinaryFormatter();
+ binaryFormatter.Serialize(fileStream, serializableObject);
+ }
+ }
+
+ #endregion
+ }
+} \ No newline at end of file