123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Collections;
- using System.Web.Script.Serialization;
- using System.IO;
- using System.Runtime.Serialization;
- using System.Reflection;
- using System.Text.RegularExpressions;
- namespace EMIS.Utility
- {
- public class JsonHelper
- {
- //对应JSON的singleInfo成员
- public string singleInfo = string.Empty;
- protected string _error = string.Empty;
- protected bool _success = true;
- protected long _totalCount = 0;
- protected System.Collections.ArrayList arrData = new ArrayList();
- protected System.Collections.ArrayList arrDataItem = new ArrayList();
- public JsonHelper()
- {
- }
- public static string ToJSON(object obj)
- {
- JavaScriptSerializer serializer = new JavaScriptSerializer();
- var json = serializer.Serialize(obj);
- string pattern = @"\\/Date\((\d+)\)\\/";
- MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
- Regex reg = new Regex(pattern);
- return reg.Replace(json, matchEvaluator);
- }
- /// <summary>
- /// 将Json序列化的时间由/Date(1304931520336+0800)/转为字符串
- /// </summary>
- private static string ConvertJsonDateToDateString(System.Text.RegularExpressions.Match m)
- {
- string result = string.Empty;
- DateTime dt = new DateTime(1970, 1, 1);
- dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
- dt = dt.ToLocalTime();
- result = dt.ToString("yyyy-MM-dd HH:mm:ss");
- return result;
- }
- public static string ToJSON(object obj, int recursionDepth)
- {
- JavaScriptSerializer serializer = new JavaScriptSerializer();
- serializer.RecursionLimit = recursionDepth;
- return serializer.Serialize(obj);
- }
- public static T Deserialize<T>(object obj)
- {
- JavaScriptSerializer serializer = new JavaScriptSerializer();
- return serializer.Deserialize<T>(obj.ToString());
- }
- public static string ToJsonByValueType(object obj)
- {
- ArrayList items = new ArrayList();
- PropertyInfo[] properties = obj.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
- foreach (PropertyInfo p in properties)
- {
- if (p.PropertyType.IsValueType || p.PropertyType.Name.StartsWith("String"))
- {
- var value = p.GetValue(obj, null);
- if (value != null)
- {
- if (p.PropertyType.Name.StartsWith("String"))
- value = System.Web.HttpContext.Current.Server.UrlEncode(value.ToString());
- items.Add(string.Format("{0}:\"{1}\"", p.Name, value));
- }
- }
- }
- return string.Format("{{{0}}}", string.Join(",", items.ToArray()));
- }
- //对应于JSON的success成员
- public bool success
- {
- get
- {
- return _success;
- }
- set
- {
- //如设置为true则清空error
- if (success) _error = string.Empty;
- _success = value;
- }
- }
- //对应于JSON的error成员
- public string error
- {
- get
- {
- return _error;
- }
- set
- {
- //如设置error,则自动设置success为false
- if (value != "") _success = false;
- _error = value;
- }
- }
- public long totlalCount
- {
- get { return _totalCount; }
- set { _totalCount = value; }
- }
- //重置,每次新生成一个json对象时必须执行该方法
- public void Reset()
- {
- _success = true;
- _error = string.Empty;
- singleInfo = string.Empty;
- arrData.Clear();
- arrDataItem.Clear();
- }
- public void AddItem(string name, string value)
- {
- arrData.Add(name + ":\"" + value + "\"");
- }
- public void AddItem(string name)
- {
- arrData.Add(name);
- }
- public void AddItem2(string name, string value)
- {
- arrData.Add(name + ":" + value);
- }
- public void ItemOk()
- {
- arrData.Add("<BR>");
- }
- public void AddItemChildren(string name, string value)
- {
- arrData.Add(name + ":'" + value + "'");
- }
- //序列化JSON对象,得到返回的JSON代码
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- //sb.Append("{");
- //sb.Append("totalCount:" + totlalCount.ToString() + ",");
- //sb.Append("success:" + _success.ToString().ToLower() + ",");
- //sb.Append("error:\"" + _error.Replace("\"", "\\\"") + "\",");
- //sb.Append("singleInfo:\"" + singleInfo.Replace("\"", "\\\"") + "\",");
- // sb.Append("data:[");
- sb.Append("[");
- int index = 0;
- sb.Append("{");
- if (arrData.Count <= 0)
- {
- sb.Append("}]");
- }
- else
- {
- foreach (string val in arrData)
- {
- index++;
- if (val != "<BR>")
- {
- sb.Append(val + ",");
- }
- else
- {
- sb = sb.Replace(",", "", sb.Length - 1, 1);
- sb.Append("},");
- if (index < arrData.Count)
- {
- sb.Append("{");
- }
- }
- }
- sb = sb.Replace(",", "", sb.Length - 1, 1);
- sb.Append("]");
- }
- //sb.Append("}");
- return sb.ToString();
- }
- //序列化JSON对象,得到返回的JSON代码 //返回子頁的JSON數據
- public string ChildrenToString(string strtmp)
- {
- return "children:" + strtmp;
- }
-
- }
- }
|