/// <summary>
/// Serialize any object to xml string
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string SerializeToXmlString<T>(this T obj)
{
XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType());
using(StringWriter textWriter = new StringWriter())
{
xmlSerializer.Serialize(textWriter, obj);
return textWriter.ToString();
}
}
/// <summary>
/// Deserialize from xml string to object
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <param name="s"></param>
/// <returns></returns>
public static T DeserializeFromXmlString<T>(this T obj, string s)
{
var serializer = new XmlSerializer(obj.GetType());
T result;
using (TextReader reader = new StringReader(s))
{
result = (T)serializer.Deserialize(reader);
}
return result;
}
/// <summary>
/// Perform deep copy on any object
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static T CloneObject<T>(this T obj)
{
return obj.DeserializeFromXmlString(obj.SerializeToXmlString());
}