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

因而可知,上述转换(序列化)各位博友 就知道有这么一回事,实在须要的时候再翻看看提供个参考。

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

但愿对你有帮助~

相关文章
相关标签/搜索