views:

365

answers:

2

Recently I was in the need to serialize a DataTable as a string for further processing (storing in a file).

So I asked myself: How to serialize a DataTable into a string?

+3  A: 

Here is the code I wrote to perform the task of serializing a DataTable into a string:

public static string SerializeTableToString(
    DataTable table )
{
    if (table == null)
    {
        return null;
    }
    else
    {
        using (var sw = new StringWriter())
        using (var tw = new XmlTextWriter(sw))
        {
            // Must set name for serialization to succeed.
            table.TableName = @"MyTable";

            // --
            // http://bit.ly/a75DK7

            tw.Formatting = Formatting.Indented;

            tw.WriteStartDocument();
            tw.WriteStartElement(@"data");

            ((IXmlSerializable)table).WriteXml(tw);

            tw.WriteEndElement();
            tw.WriteEndDocument();

            // --

            tw.Flush();
            tw.Close();
            sw.Flush();

            return sw.ToString();
        }
    }
}

Hopefully this is useful for someone somewhere out there.

(Please note that I asked in the past whether it is OK to post snippets and got replies that this should be OK; correct me if I am wrong on that - thanks!)

Uwe Keim
Why not just shove it in a DataSet, and save that? Should be no more than 2-3 lines...
leppie
This was, what I tried first. To my surprise, the DataSet reference of the DataTable was NULL, so I used this solution.
Uwe Keim
+1  A: 

I would suggest NOT to serialize the datatable and use custom entities for persistence/contracts to avoid difference in implementation details between .Net versions.

Sheng Jiang 蒋晟
Good point, thanks for your comment.
Uwe Keim