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