Подтвердить что ты не робот

Как сериализовать DataTable для строки?

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

Итак, я спросил себя: как сериализовать DataTable в строку?

4b9b3361

Ответ 1

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

Надеюсь, это полезно для кого-то там.

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

Ответ 2

Вы также можете попробовать написать 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

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