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 }
  • 相关阅读:
    计算机网络精华知识总结01
    使用hexo创建github博客
    Android Toolbar样式定制详解
    我的PhoneGap安装配置经历
    APMServ5.2.6升级PHP
    WordPress网站更换老鹰主机详细操作
    Windows下的SVN环境搭建详解
    最新Android 出现Please ensure that adb is correctly located at问题的解决方法
    QSqlDatabase
    Qt Pro相关
  • 原文地址:https://www.cnblogs.com/asingna/p/2122283.html
Copyright © 2011-2022 走看看