原文:http://www.cnblogs.com/yzhxhwt/archive/2009/07/27/1531877.html

创建Json数据类型,以用来生成树状结构


 1 namespace HIS.Common
 2 {
 3     public class JsonDataCreater
 4     {
 5         public JsonDataCreater()
 6         {
 7             //
 8             // TODO: 在此处添加构造函数逻辑
 9             //
10         }
11         /// <summary>
12         /// 将数据转换成JasonData,以便extjs和jquery使用
13         /// </summary>
14         /// <param name="dt"></param>
15         /// <param name="displayCount"></param>
16         /// <returns></returns>
17         public static string CreateJsonParameters(DataTable dt, bool displayCount)
18         {
19             StringBuilder JsonString = new StringBuilder();
20 
21             if (dt != null)
22             {
23                 JsonString.Append("{ ");
24                 JsonString.Append("\"data\":[ ");
25                 for (int i = 0; i < dt.Rows.Count; i++)
26                 {
27                     JsonString.Append("{ ");
28                     for (int j = 0; j < dt.Columns.Count; j++)
29                     {
30                         if (j < dt.Columns.Count - 1)
31                         {
32                             if (dt.Columns[j].DataType == typeof(bool))
33                             {
34                                 JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + dt.Rows[i][j].ToString().ToLower() + ",");
35                             }
36                             else
37                             {
38                                 JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");
39                             }
40                         }
41                         else if (j == dt.Columns.Count - 1)
42                         {
43                             if (dt.Columns[j].DataType == typeof(bool))
44                             {
45                                 JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + dt.Rows[i][j].ToString().ToLower());
46                             }
47                             else
48                             {
49                                 JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
50                             }
51                         }
52                     }
53                     /*截取string的最后末尾*/
54                     if (i == dt.Rows.Count - 1)
55                     {
56                         JsonString.Append("} ");
57                     }
58                     else
59                     {
60                         JsonString.Append("}, ");
61                     }
62                 }
63                 JsonString.Append("]");
64 
65                 if (displayCount)
66                 {
67                     JsonString.Append(",");
68 
69                     JsonString.Append("\"totalcount\":");
70                     JsonString.Append(dt.Rows.Count);
71                 }
72 
73                 JsonString.Append("}");
74                 return JsonString.ToString();
75             }
76             else
77             {
78                 return null;
79             }
80         }
81     }
82 }

JsonHelper类,都是通用的


  1 namespace HIS.Common
  2 {
  3     public class JsonHelper
  4     {
  5         public static string CreateJsonParameters(DataTable dt, bool displayCount)
  6         {
  7             return CreateJsonParameters(dt, displayCount, dt.Rows.Count);
  8         }
  9 
 10         public static string CreateJsonParameters(DataTable dt)
 11         {
 12             return CreateJsonParameters(dt, true);
 13         }
 14 
 15         public static string CreateJsonParameters(DataTable dt, bool displayCount, int totalcount)
 16         {
 17             StringBuilder JsonString = new StringBuilder();
 18             //Exception Handling        
 19 
 20             if (dt != null)
 21             {
 22                 JsonString.Append("{ ");
 23                 JsonString.Append("\"data\":[ ");
 24                 for (int i = 0; i < dt.Rows.Count; i++)
 25                 {
 26                     JsonString.Append("{ ");
 27                     for (int j = 0; j < dt.Columns.Count; j++)
 28                     {
 29                         if (j < dt.Columns.Count - 1)
 30                         {
 31                             //if (dt.Rows[i][j] == DBNull.Value) continue;
 32                             if (dt.Columns[j].DataType == typeof(bool))
 33                             {
 34                                 JsonString.Append("\"" + dt.Columns[j].ColumnName + "\":" +
 35                                                   dt.Rows[i][j].ToString().ToLower() + ",");
 36                             }
 37                             else if (dt.Columns[j].DataType == typeof(string))
 38                             {
 39                                 JsonString.Append("\"" + dt.Columns[j].ColumnName + "\":" + "\"" +
 40                                                   dt.Rows[i][j].ToString().Replace("\"", "\\\"") + "\",");
 41                             }
 42                             else
 43                             {
 44                                 JsonString.Append("\"" + dt.Columns[j].ColumnName + "\":" + "\"" + dt.Rows[i][j] + "\",");
 45                             }
 46                         }
 47                         else if (j == dt.Columns.Count - 1)
 48                         {
 49                             //if (dt.Rows[i][j] == DBNull.Value) continue;
 50                             if (dt.Columns[j].DataType == typeof(bool))
 51                             {
 52                                 JsonString.Append("\"" + dt.Columns[j].ColumnName + "\":" +
 53                                                   dt.Rows[i][j].ToString().ToLower());
 54                             }
 55                             else if (dt.Columns[j].DataType == typeof(string))
 56                             {
 57                                 JsonString.Append("\"" + dt.Columns[j].ColumnName + "\":" + "\"" +
 58                                                   dt.Rows[i][j].ToString().Replace("\"", "\\\"") + "\"");
 59                             }
 60                             else
 61                             {
 62                                 JsonString.Append("\"" + dt.Columns[j].ColumnName + "\":" + "\"" + dt.Rows[i][j] + "\"");
 63                             }
 64                         }
 65                     }
 66                     /*end Of String*/
 67                     if (i == dt.Rows.Count - 1)
 68                     {
 69                         JsonString.Append("} ");
 70                     }
 71                     else
 72                     {
 73                         JsonString.Append("}, ");
 74                     }
 75                 }
 76                 JsonString.Append("]");
 77 
 78                 if (displayCount)
 79                 {
 80                     JsonString.Append(",");
 81 
 82                     JsonString.Append("\"totalcount\":");
 83                     JsonString.Append(totalcount);
 84                 }
 85 
 86                 JsonString.Append("}");
 87                 return JsonString.ToString().Replace("\n", "");
 88             }
 89             else
 90             {
 91                 return null;
 92             }
 93         }
 94 
 95         #region object 2 json
 96 
 97         private static void WriteDataRow(StringBuilder sb, DataRow row)
 98         {
 99             sb.Append("{");
100             foreach (DataColumn column in row.Table.Columns)
101             {
102                 sb.AppendFormat("\"{0}\":", column.ColumnName);
103                 WriteValue(sb, row[column]);
104                 sb.Append(",");
105             }
106             // Remove the trailing comma.
107             if (row.Table.Columns.Count > 0)
108             {
109                 --sb.Length;
110             }
111             sb.Append("}");
112         }
113 
114         private static void WriteDataSet(StringBuilder sb, DataSet ds)
115         {
116             sb.Append("{\"Tables\":{");
117             foreach (DataTable table in ds.Tables)
118             {
119                 sb.AppendFormat("\"{0}\":", table.TableName);
120                 WriteDataTable(sb, table);
121                 sb.Append(",");
122             }
123             // Remove the trailing comma.
124             if (ds.Tables.Count > 0)
125             {
126                 --sb.Length;
127             }
128             sb.Append("}}");
129         }
130 
131         private static void WriteDataTable(StringBuilder sb, DataTable table)
132         {
133             sb.Append("{\"Rows\":[");
134             foreach (DataRow row in table.Rows)
135             {
136                 WriteDataRow(sb, row);
137                 sb.Append(",");
138             }
139             // Remove the trailing comma.
140             if (table.Rows.Count > 0)
141             {
142                 --sb.Length;
143             }
144             sb.Append("]}");
145         }
146 
147         private static void WriteEnumerable(StringBuilder sb, IEnumerable e)
148         {
149             bool hasItems = false;
150             sb.Append("[");
151             foreach (object val in e)
152             {
153                 WriteValue(sb, val);
154                 sb.Append(",");
155                 hasItems = true;
156             }
157             // Remove the trailing comma.
158             if (hasItems)
159             {
160                 --sb.Length;
161             }
162             sb.Append("]");
163         }
164 
165         private static void WriteHashtable(StringBuilder sb, IDictionary e)
166         {
167             bool hasItems = false;
168             sb.Append("{");
169             foreach (string key in e.Keys)
170             {
171                 sb.AppendFormat("\"{0}\":", key.ToLower());
172                 WriteValue(sb, e[key]);
173                 sb.Append(",");
174                 hasItems = true;
175             }
176             // Remove the trailing comma.
177             if (hasItems)
178             {
179                 --sb.Length;
180             }
181             sb.Append("}");
182         }
183 
184         private static void WriteObject(StringBuilder sb, object o)
185         {
186             MemberInfo[] members = o.GetType().GetMembers(BindingFlags.Instance | BindingFlags.Public);
187             sb.Append("{");
188             bool hasMembers = false;
189             foreach (MemberInfo member in members)
190             {
191                 bool hasValue = false;
192                 object val = null;
193                 if ((member.MemberType & MemberTypes.Field) == MemberTypes.Field)
194                 {
195                     FieldInfo field = (FieldInfo)member;
196                     val = field.GetValue(o);
197                     hasValue = true;
198                 }
199                 else if ((member.MemberType & MemberTypes.Property) == MemberTypes.Property)
200                 {
201                     PropertyInfo property = (PropertyInfo)member;
202                     if (property.CanRead && property.GetIndexParameters().Length == 0)
203                     {
204                         val = property.GetValue(o, null);
205                         hasValue = true;
206                     }
207                 }
208                 if (hasValue)
209                 {
210                     sb.Append("\"");
211                     sb.Append(member.Name);
212                     sb.Append("\":");
213                     WriteValue(sb, val);
214                     sb.Append(",");
215                     hasMembers = true;
216                 }
217             }
218             if (hasMembers)
219             {
220                 --sb.Length;
221             }
222             sb.Append("}");
223         }
224 
225         private static void WriteString(StringBuilder sb, IEnumerable s)
226         {
227             sb.Append("\"");
228             foreach (char c in s)
229             {
230                 switch (c)
231                 {
232                     case '\"':
233                         sb.Append("\\\"");
234                         break;
235                     case '\\':
236                         sb.Append("\\\\");
237                         break;
238                     case '\b':
239                         sb.Append("\\b");
240                         break;
241                     case '\f':
242                         sb.Append("\\f");
243                         break;
244                     case '\n':
245                         sb.Append("\\n");
246                         break;
247                     case '\r':
248                         sb.Append("\\r");
249                         break;
250                     case '\t':
251                         sb.Append("\\t");
252                         break;
253                     default:
254                         int i = c;
255                         if (i < 32 || i > 127)
256                         {
257                             sb.AppendFormat("\\u{0:X04}", i);
258                         }
259                         else
260                         {
261                             sb.Append(c);
262                         }
263                         break;
264                 }
265             }
266             sb.Append("\"");
267         }
268 
269         public static void WriteValue(StringBuilder sb, object val)
270         {
271             if (val == null || val == DBNull.Value)
272             {
273                 sb.Append("null");
274             }
275             else if (val is string || val is Guid)
276             {
277                 WriteString(sb, val.ToString());
278             }
279             else if (val is bool)
280             {
281                 sb.Append(val.ToString().ToLower());
282             }
283             else if (val is double ||
284                      val is float ||
285                      val is long ||
286                      val is int ||
287                      val is short ||
288                      val is byte ||
289                      val is decimal)
290             {
291                 sb.AppendFormat(CultureInfo.InvariantCulture.NumberFormat, "{0}", val);
292             }
293             else if (val.GetType().IsEnum)
294             {
295                 sb.Append((int)val);
296             }
297             else if (val is DateTime)
298             {
299                 sb.Append("new Date(\"");
300                 sb.Append(((DateTime)val).ToString("MMMM, d yyyy HH:mm:ss",
301                                                     new CultureInfo("en-US", false).DateTimeFormat));
302                 sb.Append("\")");
303             }
304             else if (val is DataSet)
305             {
306                 WriteDataSet(sb, val as DataSet);
307             }
308             else if (val is DataTable)
309             {
310                 WriteDataTable(sb, val as DataTable);
311             }
312             else if (val is DataRow)
313             {
314                 WriteDataRow(sb, val as DataRow);
315             }
316             else if (val is Hashtable)
317             {
318                 WriteHashtable(sb, val as Hashtable);
319             }
320             else if (val is IEnumerable)
321             {
322                 WriteEnumerable(sb, val as IEnumerable);
323             }
324             else
325             {
326                 WriteObject(sb, val);
327             }
328         }
329 
330         public static string Convert2Json(object o)
331         {
332             StringBuilder sb = new StringBuilder();
333             WriteValue(sb, o);
334             return sb.ToString();
335         }
336 
337         #endregion
338     }
339 }

转载于:https://www.cnblogs.com/asingna/archive/2011/07/30/2122283.html

Json格式类的转换相关代码--转载相关推荐

  1. 将JSON格式的字符串转换成List集合引入gson 的jar包

    将JSON格式的字符串转换成List集合 排错 IDEA中java文件出现小黄色的J . 打开项目工程的工程结构设置(快捷键:ctrl+alt+shift+s),如图中所示 . . 选择第一栏的Mod ...

  2. VS功能之自动生成json格式类

    当我们拿到一个json格式的对象时,别急着在类中新建model,因为一个一个敲代码很是麻烦,vs提供了一个很方便的功能,如图所示: 这样是不是很方便,更重要的是,减少了失误率,共勉.

  3. Javascript中char和int的互相转换的代码(转载)

    Javascript中char和int的互相转换的代码 // Converts an integer (unicode value) to a char function itoa(i) {      ...

  4. json格式的简单转换

    JSON:ajax向客户端响应的内容有多个值或是一个对象时,人们提供了一项技术json   json的基本格式是:{"id":1001,"name":" ...

  5. JSON格式的文件转换对象存入数据库

    JSON文件中的格式 [{"word": "嗄","oldword": "嗄","strokes": ...

  6. Python JSON格式与字符串转换(字符串转json、json转字符串)

    1. 字符串转为JSON 源代码: import jsonstr = ''' [{"name": "Tom","gender": " ...

  7. java对象转xml jackson_五分钟Jackson入门(三) JSON数据类XML转换(附项目源码)

    JSON数据看起来就像一棵树,也可以用类似于XML的解析方法来解析.将上篇文章的Demo改为: package com.hankcs; import org.codehaus.jackson.Json ...

  8. libgif.js javascript拆分gif动图并导出保存为json格式文件(记录纯代码)

    libgif.js 接上文Cesium添加GIF图 libgif.js+Cesium.CallbackProperty扩展libgif.js的使用 let gifimg = document.getE ...

  9. python json格式和csv文件转换

    python json格式和csv文件转换 上代码 1 import csv 2 import json 3 4 ''' 5 json格式示例 6 [{ "firstName":& ...

最新文章

  1. NetworkManager 冲突
  2. iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法
  3. javascript Date 格式化
  4. iOS打包framework - Swift完整项目打包Framework,嵌入OC项目使用
  5. 省呱呱典型用户和用户场景
  6. Document Builder: REMOVE_CC_DEFAULT_TEXTS
  7. A2K课程目录及学习计划
  8. 201521123050 《Java程序设计》第8周学习总结
  9. ADSL(中国电信\电信)常见故障代码…
  10. Ubuntu16.04设置AP热点方法
  11. 推荐一款PDF阅读工具Apabi Reader
  12. 今日arXiv精选 | Interspeech/KDD/TACL/ICCV/CIKM
  13. java 支付宝帐单_支付宝单笔提现转账到个人用户,java代码实现
  14. 成功转行IT软件测试,已在职3年月薪2w,分享下我本科毕业2年后转行的经历
  15. 人工神经网络的英文简称,人工神经网络英语全称
  16. android alert
  17. 环境变量和模式(Vite)
  18. 凸包问题-Graham-Scan算法-python实现
  19. 高质量文章导航-持续更新中
  20. S2B2C模式流程图

热门文章

  1. 正态分布的前世今生:误差分布曲线的确立
  2. 系统学习机器学习之增强学习(四)--马尔可夫决策过程策略MC求解
  3. TMS320C55x之C/C++语言程序设计
  4. C语言:有N个数从小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个数。如果不在数组中,打印“not found”。
  5. Redis数据库 | 快速入门 | 自学笔记
  6. 【equals与==比较】String的两种拼接
  7. centos shell mysql数据库备份_CentOS6.5下通过Shell创建、备份、还原MySQL数据库
  8. java 算法比较,java几种面消隐算法的比较
  9. mysql explain select_type
  10. kafka处理大数据包