/******************************
* 说明:Json相关操作
* 创建人:龚宇超
* 创建日期:2017-10-23
* 修改人:
* 修改日期:
* 修改备注:
* 版本:1.0.0.0
******************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Web.Script.Serialization;
using System.Collections;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Lskj.Util
{
///
/// Json 相关操作
///
public static class JsonUtil
{
///
/// Json 字符串 转换为 DataTable数据集合
///
///
///
public static DataTable ToComplexTable(string json)
{
DataTable dataTable = new DataTable(); //实例化
DataTable result;
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = javaScriptSerializer.Deserialize(json);
if (arrayList.Count > 0)
{
foreach (Dictionary dictionary in arrayList)
{
if (dictionary.Keys.Count() == 0)
{
result = dataTable;
return result;
}
//Columns
if (dataTable.Columns.Count == 0)
{
foreach (string current in dictionary.Keys)
{
if (current != "data")
dataTable.Columns.Add(current, dictionary[current].GetType());
else
{
ArrayList list = dictionary[current] as ArrayList;
foreach (Dictionary dic in list)
{
foreach (string key in dic.Keys)
{
dataTable.Columns.Add(key, dic[key].GetType());
}
break;
}
}
}
}
//Rows
string root = "";
foreach (string current in dictionary.Keys)
{
if (current != "data")
root = current;
else
{
ArrayList list = dictionary[current] as ArrayList;
foreach (Dictionary dic in list)
{
DataRow dataRow = dataTable.NewRow();
dataRow[root] = dictionary[root];
foreach (string key in dic.Keys)
{
dataRow[key] = dic[key];
}
dataTable.Rows.Add(dataRow);
}
}
}
}
}
}
catch
{
}
result = dataTable;
return result;
}
///
/// 说明:json 字符串转换为DataTable
/// 创建人:龚宇超
/// 创建日期:2017-10-23
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The json.
/// DataTable.
public static DataTable ToDataTable(this string json)
{
int interception = json.LastIndexOf(']');
json = json.Substring(0, interception + 1);
DataTable dataTable = new DataTable(); //实例化
DataTable result;
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = javaScriptSerializer.Deserialize(json);
if (arrayList != null && arrayList.Count > 0)
{
foreach (Dictionary dictionary in arrayList)
{
if (dictionary.Keys.Count() == 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 (Exception ex)
{
}
result = dataTable;
return result;
}
///
/// 说明:
/// 创建人:龚宇超
/// 创建日期:2017-10-23
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The json.
/// DataRow.
public static DataRow ToDataRow(this string json)
{
if (string.IsNullOrWhiteSpace(json)) return null;
JObject rowObject = JsonConvert.DeserializeObject(json);
JArray jArray = new JArray();
jArray.Add(rowObject);
DataTable table = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(jArray));
return table != null && table.Rows.Count > 0 ? table.Rows[0] : null;
}
///
/// 说明:DataTable To JsonArray
/// 创建人:龚宇超
/// 创建日期:2017-10-23
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The dt table.
/// System.String.
public static string ToJsonArray(this DataTable dtTable)
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = new ArrayList();
foreach (DataRow dataRow in dtTable.Rows)
{
Dictionary dictionary = new Dictionary(); //实例化一个参数集合
foreach (DataColumn dataColumn in dtTable.Columns)
{
dictionary.Add(dataColumn.ColumnName, dataRow[dataColumn.ColumnName].ToStr());
}
arrayList.Add(dictionary); //ArrayList集合中添加键值
}
return javaScriptSerializer.Serialize(arrayList); //返回一个json字符串
}
///
/// 说明:DataRow To Json
/// 创建人:龚宇超
/// 创建日期:2017-10-23
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The row.
/// System.String.
public static string ToJsonObject(this DataRow row)
{
DataTable dataTable = row.Table.Clone();
DataRow dataRow = dataTable.NewRow();
dataRow.ItemArray = row.ItemArray;
dataTable.Rows.Add(dataRow);
JArray jArray = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(dataTable));
return jArray[0] + "";
}
}
}