C# Json 序列化大全--任我行
2013-12-31 15:49
369 查看
public class JsonHelper { /// <summary> /// 将Model转换为Json字符串 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <returns></returns> public static string GetJson<T>(T obj) { try { DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(T)); using (MemoryStream ms = new MemoryStream()) { json.WriteObject(ms, obj); string strJson = Encoding.UTF8.GetString(ms.ToArray()); string p = @"\\/Date\((\d+)\+\d+\)\\/"; MatchEvaluator me = new MatchEvaluator(ConvertJsonDateToDateString); Regex rg = new Regex(p); strJson = rg.Replace(strJson, me); return strJson; } } catch (Exception ex) { } return string.Empty; } /// <summary> /// 将Json字符串转换为Model /// </summary> /// <typeparam name="T"></typeparam> /// <param name="strJson"></param> /// <returns></returns> public static T ParseJson<T>(string strJson) { try { string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}[a-z,A-Z]"; MatchEvaluator me = new MatchEvaluator(ConvertDateTimeToJsonDate); Regex rg = new Regex(p); strJson = rg.Replace(strJson, me); p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"; me = new MatchEvaluator(ConvertDateTimeToJsonDate); rg = new Regex(p); strJson = rg.Replace(strJson, me); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); T obj = (T)serializer.ReadObject(ms); return obj; } } catch (Exception ex) { } return default(T); } /// <summary> /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串 /// </summary> /// <param name="m"></param> /// <returns></returns> private static string ConvertJsonDateToDateString(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; } /// <summary> /// 将时间字符串转化成json时间 /// </summary> /// <param name="m"></param> /// <returns></returns> private static string ConvertDateTimeToJsonDate(Match m) { string result = string.Empty; DateTime dt = DateTime.Parse(m.Groups[0].Value); dt = dt.ToUniversalTime(); TimeSpan ts = dt - DateTime.Parse("1970-01-01"); result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds); return result; } }
注:如果是要将Class类Json序列化时,在实体类上面和成员上面添加一个契约,和WCF 契约一样。
举例如:
/// <summary> /// 至爱甄选实体类 /// </summary> [Serializable] [DataContract] public class FavoriteInfo { private int _id; private string _title;/// <summary> /// 至爱甄选Id /// </summary> [DataMember] public int Id { set { _id = value; } get { return _id; } } [DataMember] /// <summary> /// 标题 /// </summary> public string Title { set { _title = value; } get { return _title; } } }
调用方式如下:
//获取数据集,返回List<FavoriteInfo> IList<FavoriteInfo> favoriteModelList = new PB.Favorite().GetFavoriteModelList(1, 1, ""); if (favoriteModelList!=null && favoriteModelList.Count>0) { string jsonString = JsonHelper.GetJson<IList<FavoriteInfo>>(favoriteModelList); context.Response.Write(jsonString); }
相关文章推荐
- javascript内部原理篇[进入上下文之前javascript所做的工作]
- javascript内部原理篇[进入上下文之前javascript所做的工作]
- 20个超实用的JavaScript技巧及最佳实践
- js 读写 cookie
- javascript中的强制类型转换
- js 程序执行与顺序实现详解
- javascript Date format(js日期格式化)
- Javascript模板引擎-Surge.js
- js 正则表达式语法规则
- 删除jsessionid
- javascript中实现sleep的两种方式
- js 正则验证输入框只允许输入正实数和正整数和负整数
- 用js形成页面的一种遮罩效果
- JSP 页面访问用户验证
- 使用javascript实现的雪花飞舞的效果
- jsp中折叠式标签的代码实现
- js获取键盘事件
- javascript中splice()、substring()、substr()三个函数的区别联系
- javascript-------插入排序
- [ javascript ] 突然想到的一个东西?测试一下!