DataTableToJson
2009-08-10 16:38 Vincent.Feng 阅读(370) 评论(0) 编辑 收藏 举报在WEB开发中,现在的jquery主要的传输格式是xml和json这两种格式.下面就把datatable to json的方法写出来,这样方便使用
Code
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Web;
5using System.Text;
6
7namespace 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
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Web;
5using System.Text;
6
7namespace 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
作者:Vincent.Feng
出处:http://www.cnblogs.com/vincentfeng
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/vincentfeng
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。