zoukankan      html  css  js  c++  java
  • Json格式类的转换相关代码转载

    原文: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 }
  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/asingna/p/2122283.html
Copyright © 2011-2022 走看看