DataTabe 對象在不少地方都會用到,特別是在Web Service、Socket等需網絡傳輸的地方。html
可是在有些地方,若是直接傳遞的話,程序可能會報告DataTable沒法序列化錯誤。sql
解決問題的方法,是對DataTable進行序列化。網絡
FCL提供的用於序列化的方法組要有三種:post
1.XML Serializationurl
2.Binary Serializationspa
3.SOAP Serializationcode
感興趣的可查下相關的具體操做文章,如 Introducing Serialization in .NET 、Object Serialization in the .NET Framework等。orm
--------------------------------------------------xml
DataTable傳遞的問題各位博友應當常常遇到,下面提供一種實現。htm
1.DataTable to byte[]
MemoryStream ms = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms, dt); byte[] tableBT = ms.ToArray();
2. byte[] to DataTable (即把上面的byte[]還原)
BinaryFormatter bf = new BinaryFormatter(); MemoryStream ms = new MemoryStream(tableBT); DataTable dt = bf.Deserialize(ms) as DataTable;
-----------------------------------------
DebugLZQ前面寫過一篇相關博文:stream、string、byte[] 互轉 ,有興趣也能夠看下。
-----------------------------------------
3.DataTable to XML(string)
string result; using (StringWriter sw = new StringWriter()) { dataTable.WriteXml(sw); result = sw.ToString(); }
關注datatable的WriteXML 有N個重載:WriteXml(String)、WriteXml(Stream)等。
與之對應的還有個ReadXML,一樣也有N個重載.
// DataTable to Stream. System.IO.MemoryStream xmlStream = new System.IO.MemoryStream(); table.WriteXml(xmlStream, XmlWriteMode.WriteSchema); // Stream to DataTable. xmlStream.Position = 0; DataTable newTable = new DataTable(); newTable.ReadXml(xmlStream);
以上這些加上stream、string、byte[] 互轉 能夠實現DataTable的任意靈活轉換。
--------------------------------------------
經DebugLZQ證明:Web service、WCF等都可直接傳遞datatable對象,卻是沒法傳遞sqlparameters對象(序列化後可傳遞)。請參見DebugLZQ前面的相關博文。
因而可知,上述轉換(序列化)各位博友 就知道有這麼一回事,實在須要的時候再翻看看提供個參考。
-----------------------------------------
但願對你有幫助~