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

DataTabe 对象在很多地方都会用到,特别是在Web Service、Socket等需网络传输的地方。

但是在有些地方,如果直接传递的话,程序可能会报告DataTable无法序列化错误。

解决问题的方法,是对DataTable进行序列化。

FCL提供的用于序列化的方法组要有三种:

1.XML Serialization

2.Binary Serialization

3.SOAP Serialization

感兴趣的可查下相关的具体操作文章,如 Introducing Serialization in .NET Object Serialization in the .NET Framework等。

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

DataTable传递的问题各位博友应当经常遇到,下面提供一种实现。

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

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

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

希望对你有帮助~

posted @ 2013-06-23 21:05  DebugLZQ  阅读(2496)  评论(0编辑  收藏  举报