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 = ; DataTable newTable = new DataTable();
newTable.ReadXml(xmlStream);

以上这些加上stream、string、byte[] 互转 可以实现DataTable的任意灵活转换。

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

经DebugLZQ证实:Web service、WCF等均可直接传递datatable对象,倒是无法传递sqlparameters对象(序列化后可传递)。请参见DebugLZQ前面的相关博文。

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

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

希望对你有帮助~

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 Gz ...

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

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

  3. List实体类、DataTable与xml互转

    序列化常用Attribute讲解说明 [XmlRootAttribute("MyCity", Namespace="abc.abc", IsNullable=f ...

  4. .NET(C#)中的DataSet、string、DataTable等对象转换成Json

    ConvertJson.cs类 using System; using System.Collections.Generic; using System.Text; using System.Data ...

  5. C#中的DataSet、string、DataTable、对象转换成Json的实现代码

    C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...

  6. (C#)中的DataSet、string、DataTable等对象转换成Json

    ConvertJson.cs类 using System; using System.Collections.Generic; using System.Text; using System.Data ...

  7. .NET DataSet、DataTable操作记录

    一直在习惯.net的编程思维,或是说C#吧.因为前几年一直在用PHP做站,现在用.net很不习惯,主要C#都依赖对控件.类的熟悉,不然很多功能都实现不了. 需求 最近做了一功能,从SQL Server ...

  8. DataTable、List使用groupby进行分组和分组统计;List、DataTable查询筛选方法

    DataTable分组统计: .用两层循环计算,前提条件是数据已经按分组的列排好序的. DataTable dt = new DataTable(); dt.Columns.AddRange(new ...

  9. 使用JavaScriptSerializer序列化集合、字典、数组、DataTable为JSON字符串 分类: 前端 数据格式 JSON 2014-10-30 14:08 169人阅读 评论(0) 收藏

    一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...

随机推荐

  1. poj2184 01背包变形,价值为可为负数

    题目链接:http://poj.org/problem?id=2184 题意:每行给出si和fi,代表牛的两个属性,然后要求选出几头牛,满足S与F都不能为负数的条件下,使S与F的和最大. tips:动 ...

  2. 基于jdk1.7实现的excel导出工具类

    通用excel导出工具类,基于泛型.反射.hashmap 以及基于泛型.反射.bean两种方式 import java.io.*;import java.lang.reflect.Field;impo ...

  3. CSS3-基于浮动的布局,响应式WEB设计,定位网页上的元素,设计打印页面的css技术

    基于浮动的布局: 1.除非图片设置了宽度,否则始终应该要对浮动的图片设置一个宽度,这样可以让浏览器给其他内容腾出环绕的空间 2.当侧边栏的高度与主内容区的高度不一致的时候,可以用个margin进行调整 ...

  4. POJ2976 Dropping tests(01分数规划)

    题目大概说给n个二元组Ai和Bi,要去掉k个,求余下的100*∑Ai/∑Bi的最大值. 假设要的最大的值是ans,令Di=Ai-ans*∑Bi,对Di排序取最大的n-k个,如果∑Ai-ans*∑Bi& ...

  5. POJ3084 Panic Room(最小割)

    把某点与某几点分开的最小花费,当然想到最小割.具体怎么建图,可以画个简单的情况,然后就清楚了: 0到1不受控制,建立0->1容量为INF的边: 1到0受在0一边的一个控制面板的控制,建立1-&g ...

  6. BZOJ1946 : [Ceoi2006]ANTENNA

    首先通过随机增量法求出最小覆盖圆,作为答案的上界. 然后二分答案,检验的时候枚举每个点作为原点,求出其他每个点被包括在圆内的角度区间,然后扫描线即可. 时间复杂度$O(Tn^2\log n)$. #i ...

  7. 用gulp替代fekit构建前端项目

    https://segmentfault.com/a/1190000003060016 离开qunar有一个多月了,在离开的时候就决定不再用fekit.做出这个决定并不是因为fekit不好,恰恰相反, ...

  8. BZOJ 1179 Atm 题解

    BZOJ 1179 Atm 题解 SPFA Algorithm Tarjan Algorithm Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来 ...

  9. POJ 1279 Art Gallery(半平面交)

    题目链接 回忆了一下,半平面交,整理了一下模版. #include <cstdio> #include <cstring> #include <string> #i ...

  10. HDU 4738 Caocao's Bridges(Tarjan)

    题目链接 #include <iostream> #include <cstring> #include <cstdio> #include <queue&g ...