Недавно мне пришлось сериализовать DataTable
как строку для дальнейшей обработки (сохранение в файле).
Итак, я спросил себя: как сериализовать DataTable в строку?
Недавно мне пришлось сериализовать DataTable
как строку для дальнейшей обработки (сохранение в файле).
Итак, я спросил себя: как сериализовать DataTable в строку?
Вот код, который я написал для выполнения задачи сериализации 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();
}
}
}
Надеюсь, это полезно для кого-то там.
(Обратите внимание, что я спросил в прошлом, можно ли публиковать фрагменты и получать ответы, что это должно быть ОК, исправьте меня, если я ошибаюсь в этом - спасибо!)
Вы также можете попробовать написать 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
Вы также можете это сделать.
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
Я бы предложил НЕ сериализовать DataTable и использовать пользовательские сущности для сохранения/контрактов, чтобы избежать различия в деталях реализации между .Net-версиями. XML-схема класса DataTable - это недокументированная деталь реализации, на которую нельзя положиться.