最近我需要将DataTable
序列化为字符串以便进一步处理(存储在文件中)。
所以我问自己:如何将DataTable序列化为字符串?
答案 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模式是您不应该依赖的未记录的实现细节。