如何将DataTable序列化为字符串?

时间:2010-02-11 13:22:30

标签: .net string datatable serialization

最近我需要将DataTable序列化为字符串以便进一步处理(存储在文件中)。

所以我问自己:如何将DataTable序列化为字符串?

4 个答案:

答案 0 :(得分:11)

以下是我编写的用于执行将DataTable序列化为字符串的任务的代码:

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";

            // --

            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();
        }
    }
}

希望这对某个地方的人有用。

(请注意我asked in the past是否可以发布片段并得到答复,这应该没问题;如果我错了,请纠正我 - 谢谢!)

答案 1 :(得分:7)

您也可以尝试将DataTable编写为XML,其工作原理非常好:

Dim dt As DataTable
Dim DataTableAsXMLString As String
'...code to populate DataTable
Using sw As New StringWriter()       
    dt.WriteXml(sw)
    DataTableAsXMLString = sw.ToString()
End Using

...然后,如果需要,您可以将XML转换回DataTable:

Dim ds As New DataSet
Dim dt2 As DataTable
Using sr As New StringReader(DataTableAsXMLString)
    ds.ReadXml(sr)
    dt2 = ds.Tables(0)
End Using

答案 2 :(得分:4)

您也可以这样做。

DataTable dt = new DataTable()  
//... Fill Datatable from SQL or a thousand other places you have seen on the net.     
Response.ContentType = "text/xml";    
dt.WriteXml(Response.OutputStream);  
Response.Flush();
Response.End();

中的文档

http://msdn.microsoft.com/en-us/library/system.data.datatable.writexml(v=VS.100).aspx

答案 3 :(得分:2)

我建议不要序列化DataTable并使用自定义实体进行持久性/合同以避免difference in implementation details between .Net versions。 DataTable类的XML模式是您不应该依赖的未记录的实现细节。