C#自定义将各种对象转换成JSON格式的类

这个C#封装类可以用于将各种格式的数据转换成JSON格式,包括List转换成Json,普通集合转换Json ,DataSet转换为Json ,Datatable转换为Json ,DataReader转换为Json等,如果你需要将对象转换成JSON,可以使用这个类。

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Data;
using  System.Reflection;
using  System.Collections;
using  System.Data.Common;
 
namespace  DotNet.Utilities
{
     //JSON转换类
     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
     }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值