zoukankan      html  css  js  c++  java
  • C# 任意类型数据转JSON格式

    /// <summary>  
    /// List转成json   
    /// </summary>  
    /// <typeparam name="T"></typeparam>  
    /// <param name="jsonName"></param>  
    /// <param name="list"></param>  
    /// <returns></returns>  
    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();  
    }  
     
    /// <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>   
    /// 对象转换为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 + "}";  
    }  
     
    /// <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 + "]";  
    }  
     
    /// <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 + "]";  
    }  
     
    /// <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>  
    /// <param name="jsonName"></param>  
    /// <param name="dt"></param>  
    /// <returns></returns>  
    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();  
    }  
     
    /// <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();  
    }  
     
    /// <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 + "}";  
    }  
     
    /// <summary>  
    /// 过滤特殊字符  
    /// </summary>  
    /// <param name="s"></param>  
    /// <returns></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 '':  
        sb.Append("\b"); break;  
       case 'f':  
        sb.Append("\f"); break;  
       case ' ':  
        sb.Append("\n"); break;  
       case ' ':  
        sb.Append("\r"); break;  
       case ' ':  
        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();  
     }  
     return str;  
    }

  • 相关阅读:
    天天共写了四本书,如果您使用有问题欢迎反馈
    难道QQ没有办法封?
    一个包含ASP.NET2.0全部登陆控件在典型身份验证的考虑
    数据访问模式二:数据集和数据适配器(传统的数据访问模式)
    数据访问两种模式的比较
    在母版页里使用FindControl的困惑
    有了中文版MSDN2,何必又东奔西走去找资料
    ASP.NET2.0技术详解与应用实例
    ASP.NET2.0新功能之客户端脚本功能
    使用ASP.NET2.0的TreeView控件显示分层数据
  • 原文地址:https://www.cnblogs.com/lijiasnong/p/3375778.html
Copyright © 2011-2022 走看看