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前面的相关博文。
由此可见,上述转换(序列化)各位博友 就知道有这么一回事,实在需要的时候再翻看看提供个参考。
-----------------------------------------
希望对你有帮助~