Monday, March 3, 2008

Using XmlSerializer for Serialization/Deserialization

This is something I wrote a while ago to allow easy way to serialize/deserialize various objects to and from XML by creating an adapter around the XmlSerializer class.
Since I don't know how this XML is going to be used this class stores it inside a string.

Serialize usage:
string s = SimpleSerializer.Instance.ToString(myObject);
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(s);

Deserialize:
MyClass obj = SimpleSerializer.Instance.FromString(xDoc.OuterXML);


/// <summary>
/// Objects serializer/deserializer
/// </summary>
public class SimpleSerializer
{
private static readonly SimpleSerializer instance = new SimpleSerializer(); //Singleton

/// <summary>
/// Gets the class's instance.
/// </summary>
/// <value>The instance.</value>
public static SimpleSerializer Instance
{
get { return instance; }
}

/// <summary>
/// Private constructor - prevents tempering with the singleton pattern
/// </summary>
private SimpleSerializer()
{
}

static SimpleSerializer()
{
}

/// <summary>
/// Converts an object to it's XML represntation
/// </summary>
/// <param name="message">The source object</param>
/// <returns>XML represntation</returns>
public string ToString(object message)
{
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(message.GetType());
using (System.IO.StringWriter sw = new System.IO.StringWriter())
{
serializer.Serialize(sw, message);
return sw.ToString();
}
}

/// <summary>
/// Converts an XML to an object
/// </summary>
/// <param name="message">The XML</param>
/// <param name="type">The expected result class</param>
/// <returns>A new object deserialized from the XML</returns>
public object FromString(string message, Type type)
{
using (System.IO.StringReader sr = new System.IO.StringReader(message))
{
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(type);
return serializer.Deserialize(sr);
}
}

/// <summary>
/// Converts an XML to an object
/// </summary>
/// <param name="message">The XML</param>
/// <typeparam name="T">The expected result class</typeparam>
/// <returns>A new object deserialized from the XML</returns>
public T FromString<T>(string message) where T: new()
{
using (System.IO.StringReader sr = new System.IO.StringReader(message))
{
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(T));
return (T)serializer.Deserialize(sr);
}
}

}

No comments: