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前面的相关博文。
由此可见,上述转换(序列化)各位博友 就知道有这么一回事,实在需要的时候再翻看看提供个参考。
-----------------------------------------
希望对你有帮助~
转载于:https://www.cnblogs.com/DebugLZQ/p/3117015.html
DataTable to byte[]、DataTable to XML(string)相关推荐
- ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)
using System; using System.Collections.Generic; using System.Data; using System.Text;namespace Gzcms ...
- C# 实现DataTable、DataSet与XML互相转换
/** <summary>/// 把DataSet.DataTable.DataView格式转换成XML字符串.XML文件/// </summary>public class ...
- 【ADO.NET基础知识】SqlConnection、command、DataSet 、DataTable、dataAdapter
1.使用Connection连接数据库的步骤: (1).添加命名空间 System.Data.SqlClient(注意:初学者经常会忘记) (2)定义连接字符串.连接SQL Server 数据库时: ...
- C#动态操作DataTable(新增行、列、查询行、列等)
public void CreateTable() { //创建表 DataTable dt = new DataTable(); ...
- 【2017001】IList转DataTable、DataTable转IList
IList转DataTable.DataTable转IList 1 using System; 2 using System.Collections.Generic; 3 using System.C ...
- 二:C#对象、集合、DataTable与Json内容互转示例;
导航目录: Newtonsoft.Json 概述 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型: 二:C#对象.集合.DataTable与Json内容互转示例: ...
- C#中DataTable新增列、删除列、更改列名、交换列位置
一.新增列 1.1.新增列 /*新增列*/ dataTable.Columns.Add("列名称", Type.GetType("数据类型"));/*比如添加[ ...
- 数据库记录的添加、修改、删除(DataAdapter、DataTable 、DataRow )
数据库记录的添加.修改.删除(DataAdapter.DataTable .DataRow ) //数据添加操作 DataSet dsLog = new DataSet(); SqlDataA ...
- base64 string 放不下_String、byte[]、Base64相互转换,不要再用错了
String与byte[] 在Java项目开发过程中,时常会遇到String与byte[]互相转换的过程,比如IO流处理,需要先将文件或字符串转为字节流,接收方需要将字节流转回字符串.那么,在相互转换 ...
最新文章
- 从空军机长到大厂程序员,关系数据库之父传奇
- 当谈论设备指纹时,我们到底在说什么?(转)
- php程序员进阶篇 [十问PHP程序员]
- 为Web应用建立基于JMX的管理系统
- 学习spring过程看的笔记(一)
- 线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。
- Spark RDD使用详解1--RDD原理
- 使用nginx cache缓存网站数据实践
- 欢迎加入唐山.NET俱乐部
- Spring boot中如何获取profiles环境
- csharp添加引用路径_C# 在Word中添加Latex 数学公式和符号
- 简单工厂模式和策略模式的区别
- Discuz!NT 系统架构分析(以前的)
- 带滤镜拍照的app_这8款拍照修图APP,简直就是逼格神器
- iOS字体适配方法总结
- flash buidler 4.5 序列号
- 阿里云OCR:(二)银行卡号识别
- 中国智慧VS西方智慧-看中国IT风云
- vga转HDMI与hdmi转VGA区别
- 什么是跨域?如何解决跨域?
热门文章
- SpringBoot文件上传源码解析
- 数据结构计算机复试题,计算机考研数据结构测试题(四)
- java中椭圆类_Java中的Graphics2D类基本使用的教程
- gRPC学习记录(二)--Hello World
- 全能HOOK框架 JNI NATIVE JAVA ART DALVIK
- eclipse项目迁移到Android Studio
- JZOJ 5669. 【GDSOI2018模拟4.19】排列
- JZOJ 5402. 【NOIP2017提高A组模拟10.8】God Knows
- python redis模块_python redis 模块 官方文档(中)
- python list查找元素下标_Python 查找list中的某个元素的所有的下标方法