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

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

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

希望对你有帮助~

转载于:https://www.cnblogs.com/DebugLZQ/p/3117015.html

DataTable to byte[]、DataTable to XML(string)相关推荐

  1. ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)

    using System; using System.Collections.Generic; using System.Data; using System.Text;namespace Gzcms ...

  2. C# 实现DataTable、DataSet与XML互相转换

    /** <summary>/// 把DataSet.DataTable.DataView格式转换成XML字符串.XML文件/// </summary>public class ...

  3. 【ADO.NET基础知识】SqlConnection、command、DataSet 、DataTable、dataAdapter

    1.使用Connection连接数据库的步骤: (1).添加命名空间 System.Data.SqlClient(注意:初学者经常会忘记) (2)定义连接字符串.连接SQL Server 数据库时: ...

  4. C#动态操作DataTable(新增行、列、查询行、列等)

    public void CreateTable()         {             //创建表             DataTable dt = new DataTable();    ...

  5. 【2017001】IList转DataTable、DataTable转IList

    IList转DataTable.DataTable转IList 1 using System; 2 using System.Collections.Generic; 3 using System.C ...

  6. 二:C#对象、集合、DataTable与Json内容互转示例;

    导航目录: Newtonsoft.Json 概述 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型:    二:C#对象.集合.DataTable与Json内容互转示例: ...

  7. C#中DataTable新增列、删除列、更改列名、交换列位置

    一.新增列 1.1.新增列 /*新增列*/ dataTable.Columns.Add("列名称", Type.GetType("数据类型"));/*比如添加[ ...

  8. 数据库记录的添加、修改、删除(DataAdapter、DataTable 、DataRow )

    数据库记录的添加.修改.删除(DataAdapter.DataTable .DataRow ) //数据添加操作 DataSet dsLog = new DataSet();     SqlDataA ...

  9. base64 string 放不下_String、byte[]、Base64相互转换,不要再用错了

    String与byte[] 在Java项目开发过程中,时常会遇到String与byte[]互相转换的过程,比如IO流处理,需要先将文件或字符串转为字节流,接收方需要将字节流转回字符串.那么,在相互转换 ...

最新文章

  1. 从空军机长到大厂程序员,关系数据库之父传奇
  2. 当谈论设备指纹时,我们到底在说什么?(转)
  3. php程序员进阶篇 [十问PHP程序员]
  4. 为Web应用建立基于JMX的管理系统
  5. 学习spring过程看的笔记(一)
  6. 线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。
  7. Spark RDD使用详解1--RDD原理
  8. 使用nginx cache缓存网站数据实践
  9. 欢迎加入唐山.NET俱乐部
  10. Spring boot中如何获取profiles环境
  11. csharp添加引用路径_C# 在Word中添加Latex 数学公式和符号
  12. 简单工厂模式和策略模式的区别
  13. Discuz!NT 系统架构分析(以前的)
  14. 带滤镜拍照的app_这8款拍照修图APP,简直就是逼格神器
  15. iOS字体适配方法总结
  16. flash buidler 4.5 序列号
  17. 阿里云OCR:(二)银行卡号识别
  18. 中国智慧VS西方智慧-看中国IT风云
  19. vga转HDMI与hdmi转VGA区别
  20. 什么是跨域?如何解决跨域?

热门文章

  1. SpringBoot文件上传源码解析
  2. 数据结构计算机复试题,计算机考研数据结构测试题(四)
  3. java中椭圆类_Java中的Graphics2D类基本使用的教程
  4. gRPC学习记录(二)--Hello World
  5. 全能HOOK框架 JNI NATIVE JAVA ART DALVIK
  6. eclipse项目迁移到Android Studio
  7. JZOJ 5669. 【GDSOI2018模拟4.19】排列
  8. JZOJ 5402. 【NOIP2017提高A组模拟10.8】God Knows
  9. python redis模块_python redis 模块 官方文档(中)
  10. python list查找元素下标_Python 查找list中的某个元素的所有的下标方法