NGToolsCSharp/NGTools/Tools/JSONConvert.cs

360 lines
11 KiB
C#
Raw Permalink Normal View History

2024-09-13 08:44:13 +00:00
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
}
}