Как сериализовать DataTable в строку? - PullRequest
13 голосов
/ 11 февраля 2010

Недавно я нуждался в сериализации DataTable в виде строки для дальнейшей обработки (сохранения в файле).

Поэтому я спросил себя: как сериализовать DataTable в строку?

Ответы [ 4 ]

11 голосов
/ 11 февраля 2010

Вот код, который я написал для выполнения задачи сериализации 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();
        }
    }
}

Надеюсь, это пригодится кому-то где-то там.

(Обратите внимание, что я спрашивал в прошлом , можно ли публиковать фрагменты и получал ответы, что это должно быть в порядке; исправьте меня, если я ошибаюсь - спасибо!)

7 голосов
/ 16 ноября 2011

Вы также можете попробовать записать 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
4 голосов
/ 03 июня 2011

Вы также можете сделать это.

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

2 голосов
/ 11 февраля 2010

Я бы предложил НЕ сериализовать DataTable и использовать пользовательские объекты для постоянства / контрактов, чтобы избежать различий в деталях реализации между версиями .Net . XML-схема класса DataTable - это недокументированная деталь реализации, на которую не следует полагаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...