• C# 任意类型数据转JSON格式(转)


    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;   
    }  
    复制代码
  • 相关阅读:
    数据结构:静态查找表
    数据结构:二叉查找树(C语言实现)
    自创open vp n windows步骤
    web application 访问控制
    postman trigger xdebug session in phpstorm
    sql查询学习和实践点滴积累
    如何写一个能在gulp build pipe中任意更改src内容的函数
    使用Virtual Audio Cable软件实现电脑混音支持电脑录音
    webpack学习笔记丁点积累
    centos 7.2 Apache+mysql+php step by step备忘
  • 原文地址:https://www.cnblogs.com/CSharpLover/p/5868230.html
Copyright © 2020-2023  润新知