XmlSerialization snippet

I keep writing this code - now I can find it on my blog in the future :-)

public static class StringXmlSerializer

{

public static string Serialize<T>(T obj)

{

XmlSerializer s = new XmlSerializer(typeof(T));

StringBuilder sb = new StringBuilder();

StringWriter sw = new StringWriter(sb);

s.Serialize(sw, obj);

return sb.ToString();

}

public static T Deserialize<T>(string str)

{

XmlSerializer s = new XmlSerializer(typeof(T));

StringReader sr = new StringReader(str);

return (T)s.Deserialize(sr);

}

}

Comments

  • Anonymous
    March 24, 2007
    Since you are alread calling your post a 'snippet', why not make it a real Visual Studio code snippet? It's fairly easy to do, as I've described on my own blog: http://blogs.msdn.com/ploeh/archive/2006/03/20/astypeCodeSnippet.aspx. A few other things about your code snippet: StringWrite and StringReader both implement IDisposable, so you should wrap them in using statements. Besides, I'd suggest calling the class 'StringXmlSerializer' instead :)

  • Anonymous
    March 26, 2007
    using blocks - agree. However the local variables sw (and sr) are not really holding on to any unmanaged stuff in this case so I rely on the GC to remove my string and stringbuilder in this case. Dispose of the reader: protected override void Dispose(bool disposing)
    {
       this._s = null;
       this._pos = 0;
       this._length = 0;
       base.Dispose(disposing);
    } Dispose of writer:
    protected override void Dispose(bool disposing)
    {
       this._isOpen = false;
       base.Dispose(disposing);
    } I know it's best practice...
    If you intent to call the method often to (de-)serialize the same types caching the XmlSerializer objects will improve performance. -again-snippet not meant as a guiding example on how to write code - merely somthing I use occasionally when playing with xsd.exe and Xml Serialization.
     

  • Anonymous
    March 26, 2007
    telerik radEditor for Office SharePoint Server 2007 has been officially released! + Telerik for MCMS...