DataTable to byte[]、DataTable to XML(string)

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前面的相關博文。

因而可知,上述轉換(序列化)各位博友 就知道有這麼一回事,實在須要的時候再翻看看提供個參考。

-----------------------------------------

但願對你有幫助~

相關文章
相關標籤/搜索