360 lines
11 KiB
C#
360 lines
11 KiB
C#
|
using System;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Data;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Web;
|
|||
|
using System.Web.Script.Serialization;
|
|||
|
|
|||
|
namespace NGTools.Tools
|
|||
|
{
|
|||
|
public class JSONConvert
|
|||
|
{
|
|||
|
|
|||
|
public static DataTable JsonToDatatable(string json)
|
|||
|
{
|
|||
|
DataTable dataTable = new DataTable(); //实例化
|
|||
|
DataTable result;
|
|||
|
try
|
|||
|
{
|
|||
|
|
|||
|
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); //引用System.Web.Extensions
|
|||
|
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
|
|||
|
ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
|
|||
|
if (arrayList.Count > 0)
|
|||
|
{
|
|||
|
foreach (Dictionary<string, object> dictionary in arrayList)
|
|||
|
{
|
|||
|
if (dictionary.Keys.Count<string>() == 0)
|
|||
|
{
|
|||
|
result = dataTable;
|
|||
|
// return result;
|
|||
|
}
|
|||
|
if (dataTable.Columns.Count == 0)
|
|||
|
{
|
|||
|
foreach (string current in dictionary.Keys)
|
|||
|
{
|
|||
|
dataTable.Columns.Add(current, dictionary[current].GetType());
|
|||
|
}
|
|||
|
}
|
|||
|
DataRow dataRow = dataTable.NewRow();
|
|||
|
foreach (string current in dictionary.Keys)
|
|||
|
{
|
|||
|
dataRow[current] = dictionary[current];
|
|||
|
}
|
|||
|
|
|||
|
dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch
|
|||
|
{
|
|||
|
}
|
|||
|
return dataTable;
|
|||
|
// return result;
|
|||
|
}
|
|||
|
|
|||
|
#region datatable转换json /ToJsonList(DataTable dt)
|
|||
|
/// <summary>
|
|||
|
/// datatable转换json
|
|||
|
/// </summary>
|
|||
|
/// <param name="dt"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static string DataTableToJsonList(DataTable dt)
|
|||
|
{
|
|||
|
//StringBuilder jsonString = new StringBuilder();
|
|||
|
//jsonString.Append("[");
|
|||
|
//DataRowCollection drc = dt.Rows;
|
|||
|
//for (int i = 0; i < drc.Count; i++)
|
|||
|
//{
|
|||
|
// jsonString.Append("{");
|
|||
|
// jsonString.Append("\"ID\":");
|
|||
|
// jsonString.Append(dt.Rows[i]["ID"] + ",");
|
|||
|
// jsonString.Append("\"jldPar\":\"{");
|
|||
|
|
|||
|
// 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("},");
|
|||
|
//}
|
|||
|
//if (jsonString.Length > 1)
|
|||
|
//{
|
|||
|
// jsonString.Remove(jsonString.Length - 1, 1);
|
|||
|
//}
|
|||
|
//jsonString.Append("]");
|
|||
|
|
|||
|
//string str = jsonString.ToString();
|
|||
|
var JsonString = new StringBuilder();
|
|||
|
if (dt.Rows.Count > 0)
|
|||
|
{
|
|||
|
JsonString.Append("");
|
|||
|
for (int i = 0; i < dt.Rows.Count; i++)
|
|||
|
{
|
|||
|
JsonString.Append("{");
|
|||
|
for (int j = 0; j < dt.Columns.Count; j++)
|
|||
|
{
|
|||
|
if (j < dt.Columns.Count - 1)
|
|||
|
{
|
|||
|
JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString()
|
|||
|
+ "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");
|
|||
|
}
|
|||
|
else if (j == dt.Columns.Count - 1)
|
|||
|
{
|
|||
|
JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString()
|
|||
|
+ "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
|
|||
|
}
|
|||
|
}
|
|||
|
if (i == dt.Rows.Count - 1)
|
|||
|
{
|
|||
|
JsonString.Append("}");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
JsonString.Append("},");
|
|||
|
}
|
|||
|
}
|
|||
|
JsonString.Append("");
|
|||
|
}
|
|||
|
return JsonString.ToString();
|
|||
|
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 格式化字符型、日期型、布尔型 /StringFormat(string str, Type type)
|
|||
|
/// <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 + "\\\"";
|
|||
|
if (string.IsNullOrEmpty(str.Trim()))
|
|||
|
{
|
|||
|
str = "\\\"" + str + "\\\"";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
str = "\\\"" + DateTime.Parse(str.Trim()).ToString("yyyy-MM-dd HH:mm:ss") + "\\\"";
|
|||
|
}
|
|||
|
}
|
|||
|
else if (type == typeof(bool))
|
|||
|
{
|
|||
|
str = str.ToLower();
|
|||
|
}
|
|||
|
else if (type != typeof(string) && string.IsNullOrEmpty(str))
|
|||
|
{
|
|||
|
str = "\\\"" + str + "\\\"";
|
|||
|
}
|
|||
|
return str;
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 过滤特殊字符 /String2Json(String s)
|
|||
|
/// <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();
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region "datatabale 转换成dg"
|
|||
|
/// <summary>
|
|||
|
/// 把DataTable数据转换为Json格式
|
|||
|
/// </summary>
|
|||
|
/// <param name="dt">传入DataTable数据</param>
|
|||
|
/// <returns></returns>
|
|||
|
public static string DataTableToDataGridJson(DataTable dt, bool multRow)
|
|||
|
{
|
|||
|
StringBuilder jsonBuilder = new StringBuilder();
|
|||
|
jsonBuilder.Append("{\"total\"");
|
|||
|
jsonBuilder.Append(":");
|
|||
|
jsonBuilder.Append(dt.Rows.Count);
|
|||
|
jsonBuilder.Append(",\"rows\":");
|
|||
|
if (dt .Rows.Count!=1|| multRow ) jsonBuilder.Append("[");
|
|||
|
for (int i = 0; i < dt.Rows.Count; i++)
|
|||
|
{
|
|||
|
jsonBuilder.Append("{");
|
|||
|
for (int j = 0; j < dt.Columns.Count; j++)
|
|||
|
{
|
|||
|
jsonBuilder.Append("\"");
|
|||
|
jsonBuilder.Append(dt.Columns[j].ColumnName);
|
|||
|
jsonBuilder.Append("\":\"");
|
|||
|
if (dt.Columns[j].ColumnName == "RQ")
|
|||
|
{
|
|||
|
jsonBuilder.Append(dt.Rows[i][j].ToString().Split(' ')[0]);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
jsonBuilder.Append(dt.Rows[i][j].ToString());
|
|||
|
}
|
|||
|
jsonBuilder.Append("\",");
|
|||
|
}
|
|||
|
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
|
|||
|
jsonBuilder.Append("},");
|
|||
|
}
|
|||
|
if (dt.Rows.Count > 0)
|
|||
|
{
|
|||
|
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
|
|||
|
}
|
|||
|
if (dt.Rows.Count != 1 || multRow)
|
|||
|
{ jsonBuilder.Append("],"); }
|
|||
|
else { jsonBuilder.Append(","); };
|
|||
|
jsonBuilder.Append("\"title");
|
|||
|
//jsonBuilder.Append(dt.TableName);
|
|||
|
jsonBuilder.Append("\":[");
|
|||
|
|
|||
|
//jsonBuilder.Append("{\"title\": \"\", \"field\":\"ck\",\"checkbox\":\"true\",\"sortable\":\"false\"},");
|
|||
|
for (int n = 0; n < dt.Columns.Count; n++) //这是循环获取列名称
|
|||
|
{
|
|||
|
jsonBuilder.Append("{");
|
|||
|
jsonBuilder.Append("\"field");
|
|||
|
jsonBuilder.Append("\":\"");
|
|||
|
jsonBuilder.Append(dt.Columns[n].ColumnName);
|
|||
|
jsonBuilder.Append("\",");
|
|||
|
jsonBuilder.Append("\"title");
|
|||
|
jsonBuilder.Append("\":\"");
|
|||
|
jsonBuilder.Append(dt.Columns[n].ColumnName);
|
|||
|
jsonBuilder.Append("\",\"sortable\":\"true\"");
|
|||
|
jsonBuilder.Append("},");
|
|||
|
}
|
|||
|
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
|
|||
|
jsonBuilder.Append("},");
|
|||
|
|
|||
|
jsonBuilder.Remove(jsonBuilder.Length - 2, 2);
|
|||
|
jsonBuilder.Append("]");
|
|||
|
jsonBuilder.Append("}");
|
|||
|
return jsonBuilder.ToString();
|
|||
|
}
|
|||
|
|
|||
|
#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 + "\":");
|
|||
|
|
|||
|
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() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
|
|||
|
if (j < dt.Columns.Count - 1)
|
|||
|
{
|
|||
|
Json.Append(",");
|
|||
|
}
|
|||
|
}
|
|||
|
Json.Append("}");
|
|||
|
if (i < dt.Rows.Count - 1)
|
|||
|
{
|
|||
|
Json.Append(",");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
Json.Append("]");
|
|||
|
return Json.ToString();
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|