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 });
}
}
}