Jak serializować DataTable do ciągu?


Niedawno musiałem serializować
DataTable
jako ciąg znaków do dalszego przetwarzania (przechowywania w pliku).
Więc zadałem sobie pytanie: jak serializować DataTable do ciągu?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Oto kod, który napisałem, aby wykonać zadanie serializacji
DataTable
do ciągu:
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();
}
}
}

Mam nadzieję, że to będzie pomocne dla kogoś gdzieś tam.

(Uwaga

w przeszłości pytałem
https://meta.stackexchange.com/questions/22706
czy warto publikować skrawki OK i otrzymałem odpowiedzi, że powinno być OK; popraw mnie, jeśli się mylę - dzięki!

)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz także spróbować napisać DataTable do XML, co działa równie dobrze:
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
.. następnie w razie potrzeby możesz przekonwertować plik XML z powrotem na 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
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Też możesz to zrobić.
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();

Dokumentacja znaleziona pod adresem
http://msdn.microsoft.com/en-us/ library/system.data.datatable.writexml (v = VS.100). aspx
http://msdn.microsoft.com/en-u ... texml(v=VS.100).aspx
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Sugerowałbym, aby NIE serializować DataTable i używać niestandardowych jednostek do trwałości/kontraktów, których należy unikać

różnice w szczegółach implementacji między wersjami
http://support.microsoft.com/kb/914460.Netto. Schemat XML klasy DataTable jest nieudokumentowanym szczegółem implementacji i nie należy na nim polegać.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się