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
{
///
/// JSON对象帮助类
///
public class JsonHelper
{
#region 私有变量
#endregion
#region 公有属性
#endregion
#region 私有方法
private static object GetObjectByJsonStringAndClientArray(string jsonString)
{
List lists = null;
//参数检测
if (string.IsNullOrEmpty(jsonString)) return lists;
lists = new List();
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 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();
IEnumerable 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 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));
break;
case "dictionary":
objReturn = JsonConvert.DeserializeObject(jsonString, typeof(Dictionary));
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
}
}