using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.IO;
|
using System.Text;
|
using Newtonsoft.Json;
|
using Newtonsoft.Json.Converters;
|
|
|
namespace CY.Infrastructure.Common
|
{
|
/// <summary>
|
/// JSON对象帮助类
|
/// </summary>
|
public class JsonHelper
|
{
|
#region 私有变量
|
#endregion
|
|
#region 公有属性
|
#endregion
|
|
#region 私有方法
|
|
private static object GetObjectByJsonStringAndClientArray(string jsonString)
|
{
|
List<string> lists = null;
|
|
//参数检测
|
if (string.IsNullOrEmpty(jsonString)) return lists;
|
|
lists = new List<string>();
|
object objTemp = JsonConvert.DeserializeObject(jsonString);
|
Newtonsoft.Json.Linq.JArray jArray = (Newtonsoft.Json.Linq.JArray)objTemp;
|
for (int i = 0; i < jArray.Count; i++)
|
{
|
Newtonsoft.Json.Linq.JValue jValue = (Newtonsoft.Json.Linq.JValue)jArray[i];
|
string item = jValue.Value.ToString();
|
lists.Add(item);
|
}
|
|
return lists;
|
}
|
|
private static object GetObjectByJsonStringAndClientObject(string jsonString)
|
{
|
Dictionary<string, string> dic = null;
|
|
//参数检测
|
if (string.IsNullOrEmpty(jsonString)) return dic;
|
|
object objTemp = JsonConvert.DeserializeObject(jsonString);
|
Newtonsoft.Json.Linq.JObject jObject = (Newtonsoft.Json.Linq.JObject)objTemp;
|
|
//获取结构
|
dic = new Dictionary<string, string>();
|
IEnumerable<Newtonsoft.Json.Linq.JProperty> jProperties = jObject.Properties();
|
foreach (Newtonsoft.Json.Linq.JProperty jProperty in jProperties)
|
{
|
string value = string.Empty;
|
string key = jProperty.Name;
|
Newtonsoft.Json.Linq.JValue jValue = (Newtonsoft.Json.Linq.JValue)jObject[key];
|
|
if (jValue.Value == null || Convert.ToString(jValue.Value) == "")
|
{
|
value = "";
|
}
|
else
|
{
|
value = jValue.Value.ToString();
|
}
|
dic.Add(key, value);
|
}
|
|
return dic;
|
}
|
|
private static object GetObjectByJsonStringAndClientDataTable(string jsonString)
|
{
|
DataTable dataTable = null;
|
|
//参数检测
|
if (string.IsNullOrEmpty(jsonString)) return dataTable;
|
|
//获取客户端DataTable对象
|
object objTemp = JsonConvert.DeserializeObject(jsonString);
|
|
//将objTemp转为JArray
|
Newtonsoft.Json.Linq.JArray jArray = (Newtonsoft.Json.Linq.JArray)objTemp;
|
|
//收集DataTable的栏目名称,根据JArray数组第1个结点信息
|
dataTable = new DataTable();
|
Newtonsoft.Json.Linq.JObject jObjectFirst = (Newtonsoft.Json.Linq.JObject)jArray[0];
|
IEnumerable<Newtonsoft.Json.Linq.JProperty> jProperties = jObjectFirst.Properties();
|
foreach (Newtonsoft.Json.Linq.JProperty jProperty in jProperties)
|
{
|
string columnName = jProperty.Name;
|
dataTable.Columns.Add(columnName, typeof(string));
|
}
|
|
//加载数据
|
for (int i = 0; i < jArray.Count; i++)
|
{
|
DataRow rowAdd = dataTable.NewRow();
|
Newtonsoft.Json.Linq.JObject array = (Newtonsoft.Json.Linq.JObject)jArray[i];
|
foreach (DataColumn column in dataTable.Columns)
|
{
|
object columnValue = null;
|
string columnName = column.ColumnName;
|
Newtonsoft.Json.Linq.JValue jValue = (Newtonsoft.Json.Linq.JValue)array[columnName];
|
columnValue = jValue.Value;
|
rowAdd[columnName] = columnValue;
|
}
|
dataTable.Rows.Add(rowAdd);
|
}
|
|
return dataTable;
|
}
|
|
#endregion
|
|
#region 公有方法
|
|
public static string GetJsonStringByObject(object objData)
|
{
|
string jsonString = string.Empty;
|
|
//参数检测
|
if (objData == null) return jsonString;
|
var iso = new IsoDateTimeConverter();
|
iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
|
jsonString = JsonConvert.SerializeObject(objData, iso);
|
return jsonString.Replace("\"\\/Date(", "new Date(").Replace(")\\/\"", ")");//针对DateTime类型格式化(客户端直接ToString()便是yyyy-MM-dd HH:mm:ss)
|
}
|
|
public static string GetJsonStringByDataTable(DataTable dataTable)
|
{
|
string jsonString = string.Empty;
|
|
//参数检测
|
if (dataTable == null || dataTable.Rows.Count == 0)
|
return jsonString;
|
|
jsonString = JsonConvert.SerializeObject(dataTable);
|
return jsonString;
|
}
|
|
public static string GetJsonStringByDataTable(DataTable dataTable, string tableName)
|
{
|
string jsonString = string.Empty;
|
|
//参数检测
|
if (dataTable == null || dataTable.Rows.Count == 0) return jsonString;
|
|
dataTable.TableName = tableName;
|
jsonString = JsonConvert.SerializeObject(dataTable);
|
return jsonString;
|
}
|
|
public static object GetObjectByJsonString(string jsonString, JsonDataType jsonDataType)
|
{
|
return JsonHelper.GetObjectByJsonString(jsonString, jsonDataType.ToString());
|
}
|
|
public static object GetObjectByJsonString(string jsonString, string jsonDataType)
|
{
|
object objReturn = null;
|
|
//参数检测
|
if (string.IsNullOrEmpty(jsonString)) return objReturn;
|
if (string.IsNullOrEmpty(jsonDataType)) return objReturn;
|
|
switch (jsonDataType.Trim().ToLower())
|
{
|
case "array":
|
objReturn = JsonConvert.DeserializeObject(jsonString, typeof(string[]));
|
break;
|
case "list":
|
objReturn = JsonConvert.DeserializeObject(jsonString, typeof(List<string>));
|
break;
|
case "dictionary":
|
objReturn = JsonConvert.DeserializeObject(jsonString, typeof(Dictionary<string, string>));
|
break;
|
case "dataset":
|
objReturn = JsonConvert.DeserializeObject(jsonString, typeof(DataSet));
|
break;
|
case "datatable":
|
objReturn = JsonConvert.DeserializeObject(jsonString, typeof(DataTable));
|
break;
|
case "clientarray":
|
objReturn = JsonHelper.GetObjectByJsonStringAndClientArray(jsonString);
|
break;
|
case "clientobject":
|
objReturn = JsonHelper.GetObjectByJsonStringAndClientObject(jsonString);
|
break;
|
case "clientdatatable":
|
objReturn = JsonHelper.GetObjectByJsonStringAndClientDataTable(jsonString);
|
break;
|
default:
|
break;
|
}
|
|
return objReturn;
|
}
|
|
#endregion
|
|
}
|
}
|