C#中的DataSet、string、DataTable、对象转换成Json的实现代码

前端技术 2023/09/09 C#

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
 }

本文地址:https://www.stayed.cn/item/23392

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。