C#.NET下轉換泛型列表為JSON格式

來源:互聯網
上載者:User

標籤:

 using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text;using System.Data;using System.Data.Common;using System.Collections;using System.Reflection;namespace LearningAspNet.JSON樣本{    public class jsonCovert    {        /// <summary>/// List轉成json /// </summary>/// <typeparam name="T"></typeparam>/// <param name="jsonName"></param>/// <param name="list"></param>/// <returns></returns>public  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();}/// <summary>/// List轉成json /// </summary>/// <typeparam name="T"></typeparam>/// <param name="list"></param>/// <returns></returns>public  string ListToJson<T>(IList<T> list){ object obj = list[0]; return ListToJson<T>(list, obj.GetType().Name);}/// <summary> /// 對象轉換為Json字串 /// </summary> /// <param name="jsonObject">對象</param> /// <returns>Json字串</returns> public  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 + "}";}/// <summary> /// 對象集合轉換Json /// </summary> /// <param name="array">集合對象</param> /// <returns>Json字串</returns> public  string ToJson(IEnumerable array){ string jsonString = "["; foreach (object item in array) {  jsonString += ToJson(item) + ","; } jsonString.Remove(jsonString.Length - 1, jsonString.Length); return jsonString + "]";}/// <summary> /// 普通集合轉換Json /// </summary> /// <param name="array">集合對象</param> /// <returns>Json字串</returns> public  string ToArrayString(IEnumerable array){ string jsonString = "["; foreach (object item in array) {  jsonString = ToJson(item.ToString()) + ","; } jsonString.Remove(jsonString.Length - 1, jsonString.Length); return jsonString + "]";}/// <summary> /// Datatable轉換為Json /// </summary> /// <param name="table">Datatable對象</param> /// <returns>Json字串</returns> public  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>/// <param name="jsonName"></param>/// <param name="dt"></param>/// <returns></returns>public  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();}/// <summary> /// DataReader轉換為Json /// </summary> /// <param name="dataReader">DataReader對象</param> /// <returns>Json字串</returns> public  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();}/// <summary> /// DataSet轉換為Json /// </summary> /// <param name="dataSet">DataSet對象</param> /// <returns>Json字串</returns> public  string ToJson(DataSet dataSet){ string jsonString = "{"; foreach (DataTable table in dataSet.Tables) {  jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ","; } jsonString = jsonString.TrimEnd(‘,‘); return jsonString + "}";}/// <summary>/// 過濾特殊字元/// </summary>/// <param name="s"></param>/// <returns></returns>public  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>public  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(); } return str;}     }}

 

C#.NET下轉換泛型列表為JSON格式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.