JSON格式化

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Reflection;
using System.Collections;
using System.Data.Common;
 
public  class  ConvertJson
{
     #region 私有方法
     /// <summary>
     /// 过滤特殊字符
     /// </summary>
     private  static  string String2Json(String s)
     {
         StringBuilder sb =  new  StringBuilder();
         for  ( int  i =  0 ; i < s.Length; i++)
         {
             char  c = s.ToCharArray()[i];
             switch  (c)
             {
                 case  '\"' :
                     sb.Append( "\\\"" );  break ;
                 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 :
                     sb.Append(c);  break ;
             }
         }
         return  sb.ToString();
     }
 
     /// <summary>
     /// 格式化字符型、日期型、布尔型
     /// </summary>
     private  static  string StringFormat(string str, Type type)
     {
         if  (type == typeof(string))
         {
             str = String2Json(str);
             str =  "\""  + str +  "\"" ;
         }
         else  if  (type == typeof(DateTime))
         {
             str =  "\""  + str +  "\"" ;
         }
         else  if  (type == typeof(bool))
         {
             str = str.ToLower();
         }
         else  if  (type != typeof(string) && string.IsNullOrEmpty(str))
         {
             str =  "\""  + str +  "\"" ;
         }
         return  str;
     }
     #endregion
 
     #region List转换成Json
     /// <summary>
     /// List转换成Json
     /// </summary>
     public  static  string ListToJson<T>(IList<T> list)
     {
         object obj = list[ 0 ];
         return  ListToJson<T>(list, obj.GetType().Name);
     }
 
     /// <summary>
     /// List转换成Json
     /// </summary>
     public  static  string ListToJson<T>(IList<T> list, string jsonName)
     {
         StringBuilder Json =  new  StringBuilder();
         if  (string.IsNullOrEmpty(jsonName)) jsonName = list[ 0 ].GetType().Name;
         Json.Append( "{\""  + jsonName +  "\":[" );
         if  (list.Count >  0 )
         {
             for  ( int  i =  0 ; i < list.Count; i++)
             {
                 T obj = Activator.CreateInstance<T>();
                 PropertyInfo[] pi = obj.GetType().GetProperties();
                 Json.Append( "{" );
                 for  ( int  j =  0 ; j < pi.Length; j++)
                 {
                     Type type = pi[j].GetValue(list[i],  null ).GetType();
                     Json.Append( "\""  + pi[j].Name.ToString() +  "\":"  + StringFormat(pi[j].GetValue(list[i], null ).ToString(), type));
 
                     if  (j < pi.Length -  1 )
                     {
                         Json.Append( "," );
                     }
                 }
                 Json.Append( "}" );
                 if  (i < list.Count -  1 )
                 {
                     Json.Append( "," );
                 }
             }
         }
         Json.Append( "]}" );
         return  Json.ToString();
     }
     #endregion
 
     #region 对象转换为Json
     /// <summary>
     /// 对象转换为Json
     /// </summary>
     /// <param name="jsonObject">对象</param>
     /// <returns>Json字符串</returns>
     public  static  string ToJson(object jsonObject)
     {
         string jsonString =  "{" ;
         PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();
         for  ( int  i =  0 ; i < propertyInfo.Length; i++)
         {
             object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject,  null );
             string value = string.Empty;
             if  (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)
             {
                 value =  "'"  + objectValue.ToString() +  "'" ;
             }
             else  if  (objectValue is string)
             {
                 value =  "'"  + ToJson(objectValue.ToString()) +  "'" ;
             }
             else  if  (objectValue is IEnumerable)
             {
                 value = ToJson((IEnumerable)objectValue);
             }
             else
             {
                 value = ToJson(objectValue.ToString());
             }
             jsonString +=  "\""  + ToJson(propertyInfo[i].Name) +  "\":"  + value +  "," ;
         }
         jsonString.Remove(jsonString.Length -  1 , jsonString.Length);
         return  jsonString +  "}" ;
     }
     #endregion
 
     #region 对象集合转换Json
     /// <summary>
     /// 对象集合转换Json
     /// </summary>
     /// <param name="array">集合对象</param>
     /// <returns>Json字符串</returns>
     public  static  string ToJson(IEnumerable array)
     {
         string jsonString =  "[" ;
         foreach (object item in array)
         {
             jsonString += ToJson(item) +  "," ;
         }
         jsonString.Remove(jsonString.Length -  1 , jsonString.Length);
         return  jsonString +  "]" ;
     }
     #endregion
 
     #region 普通集合转换Json
     /// <summary>
     /// 普通集合转换Json
     /// </summary>
     /// <param name="array">集合对象</param>
     /// <returns>Json字符串</returns>
     public  static  string ToArrayString(IEnumerable array)
     {
         string jsonString =  "[" ;
         foreach (object item in array)
         {
             jsonString = ToJson(item.ToString()) +  "," ;
         }
         jsonString.Remove(jsonString.Length -  1 , jsonString.Length);
         return  jsonString +  "]" ;
     }
     #endregion
 
     #region  DataSet转换为Json
     /// <summary>
     /// DataSet转换为Json
     /// </summary>
     /// <param name="dataSet">DataSet对象</param>
     /// <returns>Json字符串</returns>
     public  static  string ToJson(DataSet dataSet)
     {
         string jsonString =  "{" ;
         foreach (DataTable table in dataSet.Tables)
         {
             jsonString +=  "\""  + table.TableName +  "\":"  + ToJson(table) +  "," ;
         }
         jsonString = jsonString.TrimEnd( ',' );
         return  jsonString +  "}" ;
     }
     #endregion
 
     #region Datatable转换为Json
     /// <summary>
     /// Datatable转换为Json
     /// </summary>
     /// <param name="table">Datatable对象</param>
     /// <returns>Json字符串</returns>
     public  static  string ToJson(DataTable dt)
     {
         StringBuilder jsonString =  new  StringBuilder();
         jsonString.Append( "[" );
         DataRowCollection drc = dt.Rows;
         for  ( int  i =  0 ; i < drc.Count; i++)
         {
             jsonString.Append( "{" );
             for  ( int  j =  0 ; j < dt.Columns.Count; j++)
             {
                 string strKey = dt.Columns[j].ColumnName;
                 string strValue = drc[i][j].ToString();
                 Type type = dt.Columns[j].DataType;
                 jsonString.Append( "\""  + strKey +  "\":" );
                 strValue = StringFormat(strValue, type);
                 if  (j < dt.Columns.Count -  1 )
                 {
                     jsonString.Append(strValue +  "," );
                 }
                 else
                 {
                     jsonString.Append(strValue);
                 }
             }
             jsonString.Append( "}," );
         }
         jsonString.Remove(jsonString.Length -  1 1 );
         jsonString.Append( "]" );
         return  jsonString.ToString();
     }
 
     /// <summary>
     /// DataTable转换为Json
     /// </summary>
     public  static  string ToJson(DataTable dt, string jsonName)
     {
         StringBuilder Json =  new  StringBuilder();
         if  (string.IsNullOrEmpty(jsonName)) jsonName = dt.TableName;
         Json.Append( "{\""  + jsonName +  "\":[" );
         if  (dt.Rows.Count >  0 )
         {
             for  ( int  i =  0 ; i < dt.Rows.Count; i++)
             {
                 Json.Append( "{" );
                 for  ( int  j =  0 ; j < dt.Columns.Count; j++)
                 {
                     Type type = dt.Rows[i][j].GetType();
                     Json.Append( "\""  + dt.Columns[j].ColumnName.ToString() +  "\":"  + StringFormat(dt.Rows[i][j].ToString(), type));
                     if  (j < dt.Columns.Count -  1 )
                     {
                         Json.Append( "," );
                     }
                 }
                 Json.Append( "}" );
                 if  (i < dt.Rows.Count -  1 )
                 {
                     Json.Append( "," );
                 }
             }
         }
         Json.Append( "]}" );
         return  Json.ToString();
     }
     #endregion
 
     #region DataReader转换为Json
     /// <summary>
     /// DataReader转换为Json
     /// </summary>
     /// <param name="dataReader">DataReader对象</param>
     /// <returns>Json字符串</returns>
     public  static  string ToJson(DbDataReader dataReader)
     {
         StringBuilder jsonString =  new  StringBuilder();
         jsonString.Append( "[" );
         while  (dataReader.Read())
         {
             jsonString.Append( "{" );
             for  ( int  i =  0 ; i < dataReader.FieldCount; i++)
             {
                 Type type = dataReader.GetFieldType(i);
                 string strKey = dataReader.GetName(i);
                 string strValue = dataReader[i].ToString();
                 jsonString.Append( "\""  + strKey +  "\":" );
                 strValue = StringFormat(strValue, type);
                 if  (i < dataReader.FieldCount -  1 )
                 {
                     jsonString.Append(strValue +  "," );
                 }
                 else
                 {
                     jsonString.Append(strValue);
                 }
             }
             jsonString.Append( "}," );
         }
         dataReader.Close();
         jsonString.Remove(jsonString.Length -  1 1 );
         jsonString.Append( "]" );
         return  jsonString.ToString();
     }
     #endregion

} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值