DataTableToJson
2009-08-10 16:38 Vincent.Feng 阅读(373) 评论(0) 收藏 举报在WEB开发中,现在的jquery主要的传输格式是xml和json这两种格式.下面就把datatable to json的方法写出来,这样方便使用

Code
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Web;
5
using System.Text;
6
7
namespace vincent.feng
8

{
9
public class commfunc
10
{
11
/**//// <summary>
12
/// 将数据表转换成JSON类型串
13
/// </summary>
14
/// <param name="dt">要转换的数据表</param>
15
/// <returns></returns>
16
public static StringBuilder DataTableToJSON(System.Data.DataTable dt)
17
{
18
return DataTableToJSON(dt, true);
19
}
20
21
/**//// <summary>
22
/// 将数据表转换成JSON类型串
23
/// </summary>
24
/// <param name="dt">要转换的数据表</param>
25
/// <param name="dispose">数据表转换结束后是否dispose掉</param>
26
/// <returns></returns>
27
public static StringBuilder DataTableToJSON(System.Data.DataTable dt, bool dt_dispose)
28
{
29
StringBuilder stringBuilder = new StringBuilder();
30
stringBuilder.Append("[");
31
32
//数据表字段名和类型数组
33
string[] dt_field = new string[dt.Columns.Count];
34
int i = 0;
35
string formatStr = "{{";
36
string fieldtype = "";
37
foreach (System.Data.DataColumn dc in dt.Columns)
38
{
39
dt_field[i] = dc.Caption.ToLower().Trim();
40
formatStr += '"' + dc.Caption.ToLower().Trim() + '"' + ":";
41
fieldtype = dc.DataType.ToString().Trim().ToLower();
42
if (fieldtype.IndexOf("int") > 0 || fieldtype.IndexOf("deci") > 0 ||
43
fieldtype.IndexOf("floa") > 0 || fieldtype.IndexOf("doub") > 0 ||
44
fieldtype.IndexOf("bool") > 0)
45
{
46
formatStr += "{" + i + "}";
47
}
48
else
49
{
50
formatStr += '"' + "{" + i + "}" + '"';
51
}
52
formatStr += ",";
53
i++;
54
}
55
56
if (formatStr.EndsWith(","))
57
{
58
formatStr = formatStr.Substring(0, formatStr.Length - 1);//去掉尾部","号
59
}
60
formatStr += "}},";
61
62
i = 0;
63
object[] objectArray = new object[dt_field.Length];
64
foreach (System.Data.DataRow dr in dt.Rows)
65
{
66
67
foreach (string fieldname in dt_field)
68
{ //对 \ , ' 符号进行转换
69
objectArray[i] = dr[dt_field[i]].ToString().Trim().Replace("\\", "\\\\").Replace("'", "\\'");
70
switch (objectArray[i].ToString())
71
{
72
case "True":
73
{
74
objectArray[i] = "true"; break;
75
}
76
case "False":
77
{
78
objectArray[i] = "false"; break;
79
}
80
default: break;
81
}
82
i++;
83
}
84
i = 0;
85
stringBuilder.Append(string.Format(formatStr, objectArray));
86
}
87
if (stringBuilder.ToString().EndsWith(","))
88
{
89
stringBuilder.Remove(stringBuilder.Length - 1, 1);//去掉尾部","号
90
}
91
92
if (dt_dispose)
93
{
94
dt.Dispose();
95
}
96
return stringBuilder.Append("]");
97
}
98
}
99
}
100
1
using System;2
using System.Collections.Generic;3
using System.Linq;4
using System.Web;5
using System.Text;6

7
namespace vincent.feng8


{9
public class commfunc10

{11

/**//// <summary>12
/// 将数据表转换成JSON类型串13
/// </summary>14
/// <param name="dt">要转换的数据表</param>15
/// <returns></returns>16
public static StringBuilder DataTableToJSON(System.Data.DataTable dt)17

{18
return DataTableToJSON(dt, true);19
}20

21

/**//// <summary>22
/// 将数据表转换成JSON类型串23
/// </summary>24
/// <param name="dt">要转换的数据表</param>25
/// <param name="dispose">数据表转换结束后是否dispose掉</param>26
/// <returns></returns>27
public static StringBuilder DataTableToJSON(System.Data.DataTable dt, bool dt_dispose)28

{29
StringBuilder stringBuilder = new StringBuilder();30
stringBuilder.Append("[");31

32
//数据表字段名和类型数组33
string[] dt_field = new string[dt.Columns.Count];34
int i = 0;35
string formatStr = "{{";36
string fieldtype = "";37
foreach (System.Data.DataColumn dc in dt.Columns)38

{39
dt_field[i] = dc.Caption.ToLower().Trim();40
formatStr += '"' + dc.Caption.ToLower().Trim() + '"' + ":";41
fieldtype = dc.DataType.ToString().Trim().ToLower();42
if (fieldtype.IndexOf("int") > 0 || fieldtype.IndexOf("deci") > 0 ||43
fieldtype.IndexOf("floa") > 0 || fieldtype.IndexOf("doub") > 0 ||44
fieldtype.IndexOf("bool") > 0)45

{46
formatStr += "{" + i + "}";47
}48
else49

{50
formatStr += '"' + "{" + i + "}" + '"';51
}52
formatStr += ",";53
i++;54
}55

56
if (formatStr.EndsWith(","))57

{58
formatStr = formatStr.Substring(0, formatStr.Length - 1);//去掉尾部","号59
}60
formatStr += "}},";61

62
i = 0;63
object[] objectArray = new object[dt_field.Length];64
foreach (System.Data.DataRow dr in dt.Rows)65

{66

67
foreach (string fieldname in dt_field)68

{ //对 \ , ' 符号进行转换 69
objectArray[i] = dr[dt_field[i]].ToString().Trim().Replace("\\", "\\\\").Replace("'", "\\'");70
switch (objectArray[i].ToString())71

{72
case "True":73

{74
objectArray[i] = "true"; break;75
}76
case "False":77

{78
objectArray[i] = "false"; break;79
}80
default: break;81
}82
i++;83
}84
i = 0;85
stringBuilder.Append(string.Format(formatStr, objectArray));86
}87
if (stringBuilder.ToString().EndsWith(","))88

{89
stringBuilder.Remove(stringBuilder.Length - 1, 1);//去掉尾部","号90
}91

92
if (dt_dispose)93

{94
dt.Dispose();95
}96
return stringBuilder.Append("]");97
}98
}99
}100

作者:Vincent.Feng
出处:http://www.cnblogs.com/vincentfeng
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/vincentfeng
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号