using System; using System.Collections.Generic; using System.Text; using System.Linq; using System.Data; using System.IO; using System.Reflection; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.Collections; namespace Ant.Common.Utility { /// /// JSON 帮助类 /// public class JSONhelper { /// /// 将JSON转换为指定类型的对象 /// /// 对象类型 /// json字符串 /// public static T ConvertToObject(string json) { var jsetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; //jsetting.DefaultValueHandling = DefaultValueHandling.Include; return JsonConvert.DeserializeObject(json, jsetting); } /// /// 生成压缩的json 字符串 /// /// 生成json的对象 /// public static string ToJson(object obj) { return ToJson(obj, false); } /// /// 生成JSON字符串 /// /// 生成json的对象 /// 是否格式化 /// public static string ToJson(object obj, bool formatjson) { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); IsoDateTimeConverter idtc = new IsoDateTimeConverter(); idtc.DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; JsonSerializer serializer = new JsonSerializer(); serializer.Converters.Add(idtc); JsonWriter jw = new JsonTextWriter(sw); if (formatjson) { jw.Formatting = Formatting.Indented; } serializer.Serialize(jw, obj); //JsonConvert.SerializeObject(dt, idtc).ToString(); return sb.ToString(); } public static DateTime JsonToDateTime(string jsonDate) { string value = jsonDate.Substring(6, jsonDate.Length - 8); DateTimeKind kind = DateTimeKind.Utc; int index = value.IndexOf('+', 1); if (index == -1) index = value.IndexOf('-', 1); if (index != -1) { kind = DateTimeKind.Local; value = value.Substring(0, index); } long javaScriptTicks = long.Parse(value, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture); long InitialJavaScriptDateTicks = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks; DateTime utcDateTime = new DateTime((javaScriptTicks * 10000) + InitialJavaScriptDateTicks, DateTimeKind.Utc); DateTime dateTime; switch (kind) { case DateTimeKind.Unspecified: dateTime = DateTime.SpecifyKind(utcDateTime.ToLocalTime(), DateTimeKind.Unspecified); break; case DateTimeKind.Local: dateTime = utcDateTime.ToLocalTime(); break; default: dateTime = utcDateTime; break; } return dateTime; } /// /// 将数据源转换为JQGRID的JSON格式 /// /// 数据类型 /// 页索引 /// 页尺寸 /// 数据源 /// public static string ConvertTojQgridJSON(int pageindex, int pagesize, IList list) { int recordcount = list.Count; int pagecount = GetDataPages(pagesize, recordcount); IList _list = list.Skip((pageindex - 1) * pagesize).Take(pagesize).ToList(); string json = FormatJSONForJQgrid(pagecount, pageindex, recordcount, _list); return json; } /// /// 获取总页数 /// /// 每页记录数 /// 总记录数 /// public static int GetDataPages(int pagesize, int recordcount) { int iTotalpages = 0; if (recordcount > 0) { int iR = recordcount % pagesize; if (iR == 0) iTotalpages = recordcount / pagesize; else { iR = recordcount / pagesize; iTotalpages = iR + 1; } } else { iTotalpages = 0; } return iTotalpages; } public static string FormatJSONForJQgrid(int totalpages, int pageindex, int recordcount, object list) { var json = new { total = totalpages, page = pageindex, records = recordcount, rows = list }; return ToJson(json); } /// /// 格式化EASYUI DATAGRID JSON /// /// 总记录数 /// 每页记录的JSON格式 /// public static string FormatJSONForEasyuiDataGrid(int recordcount, object rowsList) { return ToJson(new { total = recordcount, rows = rowsList }); } } }