Click here to Skip to main content
15,896,269 members
Articles / Desktop Programming / Win32

Unit Testing Watcher

Rate me:
Please Sign up or sign in to vote.
4.75/5 (4 votes)
20 Jul 2008CPOL6 min read 27.1K   150   21  
A .NET 2.0 unit testing watcher solution.
//Disclaimer:
//This code snippet was kindly shared by Dave Amenta at:
//http://www.daveamenta.com/2008-05/howto-save-and-retrieve-c-objects-in-xml/
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;

namespace TestWatcherCore.Helpers
{
    /// <summary>
    /// Serializer class.  Load and Save classes from/to XML files.
    /// </summary>
    public class XMLHelper
    {
        /// <summary>
        /// Load a class from a serialized XML file.
        /// </summary>
        /// <param name="filename">full path or path relative to the XML file</param>
        /// <param name="t">type of the class that is being retrieved (Use typeof(ClassName))</param>
        /// <returns>A populated version of the class, or null on failure</returns>
        /// <exception cref="Exception">Can throw several exceptions for IO and serialization loading</exception>
        public static T Load<T>(string filename)
        {
            T ob = default(T);
            using (Stream s = File.Open(filename, FileMode.Open))
            {
                StreamReader sr = new StreamReader(s);
                ob = DeserializeObject<T>(sr.ReadToEnd());
                s.Close();
            }
            return ob;
        }

        /// <summary>
        /// Save an instance of a class to an XML file
        /// </summary>
        /// <param name="filename">Full or relative path to the file</param>
        /// <param name="cls">Class to serialize and save.</param>
        /// <param name="t">Type of the class (use: typeof(ClassName)</param>
        /// <returns>True on success, False on failure</returns>
        public static void Save<T>(string filename, T cls)
        {
            using (Stream s = File.Open(filename, FileMode.Create))
            {
                using (StreamWriter sw = new StreamWriter(s))
                {
                    sw.Write(SerializeObject<T>(cls));
                    sw.Close();
                    s.Close();
                    return;
                }
            }
        }


        /// <summary>
        /// Serialize the object into an XML format
        /// </summary>
        /// <typeparam name="T">Type of object to serialize</typeparam>
        /// <param name="pObject">the object to serialize</param>
        /// <returns>a string representing the XML version of the object</returns>
        public static String SerializeObject<T>(T pObject)
        {
            MemoryStream memoryStream = new MemoryStream();
            UTF8Encoding encoding = new UTF8Encoding();

            XmlSerializer xs = new XmlSerializer(typeof(T));
            System.Xml.XmlTextWriter xmlTextWriter = new System.Xml.XmlTextWriter(memoryStream, Encoding.UTF8);
            xs.Serialize(xmlTextWriter, (object)pObject);
            memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
            return encoding.GetString(memoryStream.ToArray());
        }

        /// <summary>
        /// Deserialize the object back into the object from an XML string
        /// </summary>
        /// <typeparam name="T">Type of the object to restore</typeparam>
        /// <param name="pXmlizedString">The string that represents the object in XML</param>
        /// <returns>A new instance of the restored object</returns>
        public static T DeserializeObject<T>(String pXmlizedString)
        {
            UTF8Encoding encoding = new UTF8Encoding();
            XmlSerializer xs = new XmlSerializer(typeof(T));
            MemoryStream memoryStream = new MemoryStream(encoding.GetBytes(pXmlizedString));
            System.Xml.XmlTextWriter xmlTextWriter = new System.Xml.XmlTextWriter(memoryStream, Encoding.UTF8);
            return (T)xs.Deserialize(memoryStream);
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Instructor / Trainer Alura Cursos Online
Brazil Brazil

Comments and Discussions