[C#] C#自定义将各种对象转换成JSON格式的类 →→→→→进入此内容的聊天室

来自 , 2019-08-11, 写在 C#, 查看 118 次.
URL http://www.code666.cn/view/a6825954
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. using System.Reflection;
  6. using System.Collections;
  7. using System.Data.Common;
  8.  
  9. namespace DotNet.Utilities
  10. {
  11.     //JSON转换类
  12.     public class ConvertJson
  13.     {
  14.         #region 私有方法
  15.         /// <summary>
  16.         /// 过滤特殊字符
  17.         /// </summary>
  18.         private static string String2Json(String s)
  19.         {
  20.             StringBuilder sb = new StringBuilder();
  21.             for (int i = 0; i < s.Length; i++)
  22.             {
  23.                 char c = s.ToCharArray()[i];
  24.                 switch (c)
  25.                 {
  26.                     case '\"':
  27.                         sb.Append("\\\""); break;
  28.                     case '\\':
  29.                         sb.Append("\\\\"); break;
  30.                     case '/':
  31.                         sb.Append("\\/"); break;
  32.                     case '\b':
  33.                         sb.Append("\\b"); break;
  34.                     case '\f':
  35.                         sb.Append("\\f"); break;
  36.                     case '\n':
  37.                         sb.Append("\\n"); break;
  38.                     case '\r':
  39.                         sb.Append("\\r"); break;
  40.                     case '\t':
  41.                         sb.Append("\\t"); break;
  42.                     default:
  43.                         sb.Append(c); break;
  44.                 }
  45.             }
  46.             return sb.ToString();
  47.         }
  48.  
  49.         /// <summary>
  50.         /// 格式化字符型、日期型、布尔型
  51.         /// </summary>
  52.         private static string StringFormat(string str, Type type)
  53.         {
  54.             if (type == typeof(string))
  55.             {
  56.                 str = String2Json(str);
  57.                 str = "\"" + str + "\"";
  58.             }
  59.             else if (type == typeof(DateTime))
  60.             {
  61.                 str = "\"" + str + "\"";
  62.             }
  63.             else if (type == typeof(bool))
  64.             {
  65.                 str = str.ToLower();
  66.             }
  67.             else if (type != typeof(string) && string.IsNullOrEmpty(str))
  68.             {
  69.                 str = "\"" + str + "\"";
  70.             }
  71.             return str;
  72.         }
  73.         #endregion
  74.  
  75.         #region List转换成Json
  76.         /// <summary>
  77.         /// List转换成Json
  78.         /// </summary>
  79.         public static string ListToJson<T>(IList<T> list)
  80.         {
  81.             object obj = list[0];
  82.             return ListToJson<T>(list, obj.GetType().Name);
  83.         }
  84.  
  85.         /// <summary>
  86.         /// List转换成Json
  87.         /// </summary>
  88.         public static string ListToJson<T>(IList<T> list, string jsonName)
  89.         {
  90.             StringBuilder Json = new StringBuilder();
  91.             if (string.IsNullOrEmpty(jsonName)) jsonName = list[0].GetType().Name;
  92.             Json.Append("{\"" + jsonName + "\":[");
  93.             if (list.Count > 0)
  94.             {
  95.                 for (int i = 0; i < list.Count; i++)
  96.                 {
  97.                     T obj = Activator.CreateInstance<T>();
  98.                     PropertyInfo[] pi = obj.GetType().GetProperties();
  99.                     Json.Append("{");
  100.                     for (int j = 0; j < pi.Length; j++)
  101.                     {
  102.                         Type type = pi[j].GetValue(list[i], null).GetType();
  103.                         Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type));
  104.  
  105.                         if (j < pi.Length - 1)
  106.                         {
  107.                             Json.Append(",");
  108.                         }
  109.                     }
  110.                     Json.Append("}");
  111.                     if (i < list.Count - 1)
  112.                     {
  113.                         Json.Append(",");
  114.                     }
  115.                 }
  116.             }
  117.             Json.Append("]}");
  118.             return Json.ToString();
  119.         }
  120.         #endregion
  121.  
  122.         #region 对象转换为Json
  123.         /// <summary>
  124.         /// 对象转换为Json
  125.         /// </summary>
  126.         /// <param name="jsonObject">对象</param>
  127.         /// <returns>Json字符串</returns>
  128.         public static string ToJson(object jsonObject)
  129.         {
  130.             string jsonString = "{";
  131.             PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();
  132.             for (int i = 0; i < propertyInfo.Length; i++)
  133.             {
  134.                 object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);
  135.                 string value = string.Empty;
  136.                 if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)
  137.                 {
  138.                     value = "'" + objectValue.ToString() + "'";
  139.                 }
  140.                 else if (objectValue is string)
  141.                 {
  142.                     value = "'" + ToJson(objectValue.ToString()) + "'";
  143.                 }
  144.                 else if (objectValue is IEnumerable)
  145.                 {
  146.                     value = ToJson((IEnumerable)objectValue);
  147.                 }
  148.                 else
  149.                 {
  150.                     value = ToJson(objectValue.ToString());
  151.                 }
  152.                 jsonString += "\"" + ToJson(propertyInfo[i].Name) + "\":" + value + ",";
  153.             }
  154.             jsonString.Remove(jsonString.Length - 1, jsonString.Length);
  155.             return jsonString + "}";
  156.         }
  157.         #endregion
  158.  
  159.         #region 对象集合转换Json
  160.         /// <summary>
  161.         /// 对象集合转换Json
  162.         /// </summary>
  163.         /// <param name="array">集合对象</param>
  164.         /// <returns>Json字符串</returns>
  165.         public static string ToJson(IEnumerable array)
  166.         {
  167.             string jsonString = "[";
  168.             foreach (object item in array)
  169.             {
  170.                 jsonString += ToJson(item) + ",";
  171.             }
  172.             jsonString.Remove(jsonString.Length - 1, jsonString.Length);
  173.             return jsonString + "]";
  174.         }
  175.         #endregion
  176.  
  177.         #region 普通集合转换Json
  178.         /// <summary>
  179.         /// 普通集合转换Json
  180.         /// </summary>
  181.         /// <param name="array">集合对象</param>
  182.         /// <returns>Json字符串</returns>
  183.         public static string ToArrayString(IEnumerable array)
  184.         {
  185.             string jsonString = "[";
  186.             foreach (object item in array)
  187.             {
  188.                 jsonString = ToJson(item.ToString()) + ",";
  189.             }
  190.             jsonString.Remove(jsonString.Length - 1, jsonString.Length);
  191.             return jsonString + "]";
  192.         }
  193.         #endregion
  194.  
  195.         #region  DataSet转换为Json
  196.         /// <summary>
  197.         /// DataSet转换为Json
  198.         /// </summary>
  199.         /// <param name="dataSet">DataSet对象</param>
  200.         /// <returns>Json字符串</returns>
  201.         public static string ToJson(DataSet dataSet)
  202.         {
  203.             string jsonString = "{";
  204.             foreach (DataTable table in dataSet.Tables)
  205.             {
  206.                 jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ",";
  207.             }
  208.             jsonString = jsonString.TrimEnd(',');
  209.             return jsonString + "}";
  210.         }
  211.         #endregion
  212.  
  213.         #region Datatable转换为Json
  214.         /// <summary>
  215.         /// Datatable转换为Json
  216.         /// </summary>
  217.         /// <param name="table">Datatable对象</param>
  218.         /// <returns>Json字符串</returns>
  219.         public static string ToJson(DataTable dt)
  220.         {
  221.             StringBuilder jsonString = new StringBuilder();
  222.             jsonString.Append("[");
  223.             DataRowCollection drc = dt.Rows;
  224.             for (int i = 0; i < drc.Count; i++)
  225.             {
  226.                 jsonString.Append("{");
  227.                 for (int j = 0; j < dt.Columns.Count; j++)
  228.                 {
  229.                     string strKey = dt.Columns[j].ColumnName;
  230.                     string strValue = drc[i][j].ToString();
  231.                     Type type = dt.Columns[j].DataType;
  232.                     jsonString.Append("\"" + strKey + "\":");
  233.                     strValue = StringFormat(strValue, type);
  234.                     if (j < dt.Columns.Count - 1)
  235.                     {
  236.                         jsonString.Append(strValue + ",");
  237.                     }
  238.                     else
  239.                     {
  240.                         jsonString.Append(strValue);
  241.                     }
  242.                 }
  243.                 jsonString.Append("},");
  244.             }
  245.             jsonString.Remove(jsonString.Length - 1, 1);
  246.             jsonString.Append("]");
  247.             return jsonString.ToString();
  248.         }
  249.  
  250.         /// <summary>
  251.         /// DataTable转换为Json
  252.         /// </summary>
  253.         public static string ToJson(DataTable dt, string jsonName)
  254.         {
  255.             StringBuilder Json = new StringBuilder();
  256.             if (string.IsNullOrEmpty(jsonName)) jsonName = dt.TableName;
  257.             Json.Append("{\"" + jsonName + "\":[");
  258.             if (dt.Rows.Count > 0)
  259.             {
  260.                 for (int i = 0; i < dt.Rows.Count; i++)
  261.                 {
  262.                     Json.Append("{");
  263.                     for (int j = 0; j < dt.Columns.Count; j++)
  264.                     {
  265.                         Type type = dt.Rows[i][j].GetType();
  266.                         Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type));
  267.                         if (j < dt.Columns.Count - 1)
  268.                         {
  269.                             Json.Append(",");
  270.                         }
  271.                     }
  272.                     Json.Append("}");
  273.                     if (i < dt.Rows.Count - 1)
  274.                     {
  275.                         Json.Append(",");
  276.                     }
  277.                 }
  278.             }
  279.             Json.Append("]}");
  280.             return Json.ToString();
  281.         }
  282.         #endregion
  283.  
  284.         #region DataReader转换为Json
  285.         /// <summary>
  286.         /// DataReader转换为Json
  287.         /// </summary>
  288.         /// <param name="dataReader">DataReader对象</param>
  289.         /// <returns>Json字符串</returns>
  290.         public static string ToJson(DbDataReader dataReader)
  291.         {
  292.             StringBuilder jsonString = new StringBuilder();
  293.             jsonString.Append("[");
  294.             while (dataReader.Read())
  295.             {
  296.                 jsonString.Append("{");
  297.                 for (int i = 0; i < dataReader.FieldCount; i++)
  298.                 {
  299.                     Type type = dataReader.GetFieldType(i);
  300.                     string strKey = dataReader.GetName(i);
  301.                     string strValue = dataReader[i].ToString();
  302.                     jsonString.Append("\"" + strKey + "\":");
  303.                     strValue = StringFormat(strValue, type);
  304.                     if (i < dataReader.FieldCount - 1)
  305.                     {
  306.                         jsonString.Append(strValue + ",");
  307.                     }
  308.                     else
  309.                     {
  310.                         jsonString.Append(strValue);
  311.                     }
  312.                 }
  313.                 jsonString.Append("},");
  314.             }
  315.             dataReader.Close();
  316.             jsonString.Remove(jsonString.Length - 1, 1);
  317.             jsonString.Append("]");
  318.             return jsonString.ToString();
  319.         }
  320.         #endregion
  321.     }
  322. }
  323. //csharp/8618

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

这儿你可以回复上面这条便签

captcha