C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。



C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。

public class ConvertJson
  {
   #region 私有方法
   /// <summary>
   /// 过滤特殊字符
   /// </summary>
   /// <param name="s">字符串</param>
   /// <returns>json字符串</returns>
   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>
   /// <param name="str"></param>
   /// <param name="type"></param>
   /// <returns></returns>
   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>
   /// <typeparam name="T"></typeparam>
   /// <param name="list"></param>
   /// <returns></returns>
   public static string ListToJson<T>(IList<T> list)
   {
    object obj = list[0];
    return ListToJson<T>(list, obj.GetType().Name);
   }
   /// <summary>
   /// list转换为json
   /// </summary>
   /// <typeparam name="T1"></typeparam>
   /// <param name="list"></param>
   /// <param name="p"></param>
   /// <returns></returns>
   private 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">json对象</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
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值