将查询出来的数据集转化成JSON格式的C#类

jopen 9年前

 using System;  using System.Collections;  using System.Collections.Generic;  using System.Data;  using System.Globalization;  using System.Linq;  using System.Reflection;  using System.Text;  using System.Web;    namespace WikEasyUIDemo  {      /// <summary>      /// JSON帮助类      /// </summary>      public class JsonHelper      {          /// <summary>          /// 生成表单编辑赋值 JSON格式          /// </summary>          /// <param name="dt"></param>          /// <param name="displayCount"></param>          /// <returns></returns>          public static string CreateJsonOne(DataTable dt, bool displayCount)          {              StringBuilder JsonString = new StringBuilder();              //Exception Handling                      if (dt != null && dt.Rows.Count > 0)              {                    for (int i = 0; i < dt.Rows.Count; i++)                  {                      JsonString.Append("{ ");                      for (int j = 0; j < dt.Columns.Count; j++)                      {                          if (j < dt.Columns.Count - 1)                          {                              JsonString.Append("ipt_" + dt.Columns[j].ColumnName.ToString().ToLower() + ":" + "\"" + dt.Rows[i][j].ToString() + "\",");                          }                          else if (j == dt.Columns.Count - 1)                          {                              JsonString.Append("ipt_" + dt.Columns[j].ColumnName.ToString().ToLower() + ":" + "\"" + dt.Rows[i][j].ToString() + "\"");                          }                      }                        if (i == dt.Rows.Count - 1)                      {                          JsonString.Append("} ");                      }                      else                      {                          JsonString.Append("}, ");                      }                  }                    return JsonString.ToString();              }              else              {                  return null;              }            }                      /// <summary>          /// 将DataTable中的数据转换成JSON格式          /// </summary>          /// <param name="dt">数据源DataTable</param>          /// <param name="displayCount">是否输出数据总条数</param>          /// <returns></returns>          public static string CreateJsonParameters(DataTable dt, bool displayCount)          {              return CreateJsonParameters(dt, displayCount, dt.Rows.Count);          }          /// <summary>          /// 将DataTable中的数据转换成JSON格式          /// </summary>          /// <param name="dt">数据源DataTable</param>          /// <returns></returns>          public static string CreateJsonParameters(DataTable dt)          {              return CreateJsonParameters(dt, true);          }          /// <summary>          /// 将DataTable中的数据转换成JSON格式          /// </summary>          /// <param name="dt">数据源DataTable</param>          /// <param name="displayCount">是否输出数据总条数</param>          /// <param name="totalcount">JSON中显示的数据总条数</param>          /// <returns></returns>          public static string CreateJsonParameters(DataTable dt, bool displayCount, int totalcount)          {              StringBuilder JsonString = new StringBuilder();              //Exception Handling                       if (dt != null)              {                  JsonString.Append("{ ");                  JsonString.Append("\"rows\":[ ");                  for (int i = 0; i < dt.Rows.Count; i++)                  {                      JsonString.Append("{ ");                      for (int j = 0; j < dt.Columns.Count; j++)                      {                          if (j < dt.Columns.Count - 1)                          {                              //if (dt.Rows[i][j] == DBNull.Value) continue;                              if (dt.Columns[j].DataType == typeof(bool))                              {                                  JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" +                                                    dt.Rows[i][j].ToString().ToLower() + ",");                              }                              else if (dt.Columns[j].DataType == typeof(string))                              {                                  JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" +                                                    dt.Rows[i][j].ToString().Replace("\"", "\\\"") + "\",");                              }                              else                              {                                  JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" + dt.Rows[i][j] + "\",");                              }                          }                          else if (j == dt.Columns.Count - 1)                          {                              //if (dt.Rows[i][j] == DBNull.Value) continue;                              if (dt.Columns[j].DataType == typeof(bool))                              {                                  JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" +                                                    dt.Rows[i][j].ToString().ToLower());                              }                              else if (dt.Columns[j].DataType == typeof(string))                              {                                  JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" +                                                    dt.Rows[i][j].ToString().Replace("\"", "\\\"") + "\"");                              }                              else                              {                                  JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" + dt.Rows[i][j] + "\"");                              }                          }                      }                      /*end Of String*/                      if (i == dt.Rows.Count - 1)                      {                          JsonString.Append("} ");                      }                      else                      {                          JsonString.Append("}, ");                      }                  }                  JsonString.Append("]");                    if (displayCount)                  {                      JsonString.Append(",");                        JsonString.Append("\"total\":");                      JsonString.Append(totalcount);                  }                    JsonString.Append("}");                  return JsonString.ToString().Replace("\n", "");              }              else              {                  return null;              }          }            #region object 2 json            private static void WriteDataRow(StringBuilder sb, DataRow row)          {              sb.Append("{");              foreach (DataColumn column in row.Table.Columns)              {                  sb.AppendFormat("\"{0}\":", column.ColumnName);                  WriteValue(sb, row[column]);                  sb.Append(",");              }              // Remove the trailing comma.              if (row.Table.Columns.Count > 0)              {                  --sb.Length;              }              sb.Append("}");          }            private static void WriteDataSet(StringBuilder sb, DataSet ds)          {              sb.Append("{\"Tables\":{");              foreach (DataTable table in ds.Tables)              {                  sb.AppendFormat("\"{0}\":", table.TableName);                  WriteDataTable(sb, table);                  sb.Append(",");              }              // Remove the trailing comma.              if (ds.Tables.Count > 0)              {                  --sb.Length;              }              sb.Append("}}");          }            private static void WriteDataTable(StringBuilder sb, DataTable table)          {              sb.Append("{\"Rows\":[");              foreach (DataRow row in table.Rows)              {                  WriteDataRow(sb, row);                  sb.Append(",");              }              // Remove the trailing comma.              if (table.Rows.Count > 0)              {                  --sb.Length;              }              sb.Append("]}");          }            private static void WriteEnumerable(StringBuilder sb, IEnumerable e)          {              bool hasItems = false;              sb.Append("[");              foreach (object val in e)              {                  WriteValue(sb, val);                  sb.Append(",");                  hasItems = true;              }              // Remove the trailing comma.              if (hasItems)              {                  --sb.Length;              }              sb.Append("]");          }            private static void WriteHashtable(StringBuilder sb, IDictionary e)          {              bool hasItems = false;              sb.Append("{");              foreach (string key in e.Keys)              {                  sb.AppendFormat("\"{0}\":", key.ToLower());                  WriteValue(sb, e[key]);                  sb.Append(",");                  hasItems = true;              }              // Remove the trailing comma.              if (hasItems)              {                  --sb.Length;              }              sb.Append("}");          }            private static void WriteObject(StringBuilder sb, object o)          {              MemberInfo[] members = o.GetType().GetMembers(BindingFlags.Instance | BindingFlags.Public);              sb.Append("{");              bool hasMembers = false;              foreach (MemberInfo member in members)              {                  bool hasValue = false;                  object val = null;                  if ((member.MemberType & MemberTypes.Field) == MemberTypes.Field)                  {                      FieldInfo field = (FieldInfo)member;                      val = field.GetValue(o);                      hasValue = true;                  }                  else if ((member.MemberType & MemberTypes.Property) == MemberTypes.Property)                  {                      PropertyInfo property = (PropertyInfo)member;                      if (property.CanRead && property.GetIndexParameters().Length == 0)                      {                          val = property.GetValue(o, null);                          hasValue = true;                      }                  }                  if (hasValue)                  {                      sb.Append("\"");                      sb.Append(member.Name);                      sb.Append("\":");                      WriteValue(sb, val);                      sb.Append(",");                      hasMembers = true;                  }              }              if (hasMembers)              {                  --sb.Length;              }              sb.Append("}");          }            private static void WriteString(StringBuilder sb, IEnumerable s)          {              sb.Append("\"");              foreach (char c in s)              {                  switch (c)                  {                      case '\"':                          sb.Append("\\\"");                          break;                      case '\\':                          sb.Append("\\\\");                          break;                      case '\b':                          sb.Append("\\b");                          break;                      case '\f':                          sb.Append("\\f");                          break;                      case '\n':                          sb.Append("\\n");                          break;                      case '\r':                          sb.Append("\\r");                          break;                      case '\t':                          sb.Append("\\t");                          break;                      default:                          int i = c;                          if (i < 32 || i > 127)                          {                              sb.AppendFormat("\\u{0:X04}", i);                          }                          else                          {                              sb.Append(c);                          }                          break;                  }              }              sb.Append("\"");          }            public static void WriteValue(StringBuilder sb, object val)          {              if (val == null || val == DBNull.Value)              {                  sb.Append("null");              }              else if (val is string || val is Guid)              {                  WriteString(sb, val.ToString());              }              else if (val is bool)              {                  sb.Append(val.ToString().ToLower());              }              else if (val is double ||                       val is float ||                       val is long ||                       val is int ||                       val is short ||                       val is byte ||                       val is decimal)              {                  sb.AppendFormat(CultureInfo.InvariantCulture.NumberFormat, "{0}", val);              }              else if (val.GetType().IsEnum)              {                  sb.Append((int)val);              }              else if (val is DateTime)              {                  sb.Append("new Date(\"");                  sb.Append(((DateTime)val).ToString("MMMM, d yyyy HH:mm:ss",                                                      new CultureInfo("en-US", false).DateTimeFormat));                  sb.Append("\")");              }              else if (val is DataSet)              {                  WriteDataSet(sb, val as DataSet);              }              else if (val is DataTable)              {                  WriteDataTable(sb, val as DataTable);              }              else if (val is DataRow)              {                  WriteDataRow(sb, val as DataRow);              }              else if (val is Hashtable)              {                  WriteHashtable(sb, val as Hashtable);              }              else if (val is IEnumerable)              {                  WriteEnumerable(sb, val as IEnumerable);              }              else              {                  WriteObject(sb, val);              }          }            /// <summary>          ///           /// </summary>          /// <param name="o"></param>          /// <returns></returns>          public static string Convert2Json(object o)          {              StringBuilder sb = new StringBuilder();              WriteValue(sb, o);              return sb.ToString();          }            #endregion      }    }    查询最终结果:    { "rows":[ { "JSON_id":"2","JSON_cardnumber":"5353435","JSON_username":"xixi","JSON_sex":"","JSON_tel":"4535345","JSON_address":"","JSON_jifen":"50","JSON_time":"2013-7-16 8:50:37","JSON_showhouse":"","JSON_remark":""} ],"total":1}