.net 实体类与json转换(.net自带类库实现)更新
2016-07-09 14:47
330 查看
原文链接:https://www.geek-share.com/detail/2679046820.html
上一篇文章中写到在.net中实体类跟json格式的相互转换,今天在做具体转换时候,发现之前版本的jsonhelp对于日期类型的转换不全面。之前版本的jsonhelp中从实体类转换成json格式时候,将日期格式转成了时间戳的形式。在这里对这个jsonhelp做出了更新。以解决转换日期类型字段的问题。代码如下:
JsonHelp.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization.Json; using System.IO; using System.Text.RegularExpressions; namespace JsonTest { class JsonHelp { public JsonHelp() { // // TODO: Add constructor logic here // } /// <summary> /// 把对象序列化 JSON 字符串 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="obj">对象实体</param> /// <returns>JSON字符串</returns> public static string GetJson<T>(T obj) { //记住 添加引用 System.ServiceModel.Web /** * 如果不添加上面的引用,System.Runtime.Serialization.Json; Json是出不来的哦 * */ DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(T)); using (MemoryStream ms = new MemoryStream()) { json.WriteObject(ms, obj); string jsonString = Encoding.UTF8.GetString(ms.ToArray()); string pattern = @"\\/Date\((\d+)\+\d+\)\\/"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString); Regex reg = new Regex(pattern); jsonString = reg.Replace(jsonString, matchEvaluator); return jsonString; } } /// <summary> /// 把JSON字符串还原为对象 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="jsonString">JSON字符串</param> /// <returns>对象实体</returns> public static T ParseFormJson<T>(string jsonString) { T obj = Activator.CreateInstance<T>(); string pattern = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate); Regex reg = new Regex(pattern); jsonString = reg.Replace(jsonString, matchEvaluator); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))) { DataContractJsonSerializer dcj = new DataContractJsonSerializer(typeof(T)); return (T)dcj.ReadObject(ms); } } /// <summary> /// 将Json序列化的时间由/Date(1304931520336+0800)/转为字符串 /// </summary> 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> private static string ConvertDateStringToJsonDate(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; } } }
测试代码:
using ConsoleApplication1.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { using (var db = new JooWMSContext()) { var admin = db.Admins.Where(p => p.ID > 0).OrderBy(p => p.ID); foreach (var ad in admin) { Console.WriteLine(JsonTest.JsonHelp.GetJson<ConsoleApplication1.Models.Admin>(ad)); } Console.ReadKey(); } } } }
写测试代码时候 用到了EF ,这里推荐一个不错的工具。EF Power Tools 目前是beta4 版本。
转载于:https://www.cnblogs.com/kim-meng/p/5655873.html
相关文章推荐
- .net 实体类与json转换(.net自带类库实现)更新
- .net 实体类与json转换(.net自带类库实现)
- Asp.net3.5 实现Json与.net实体类相互转换
- C#中使用JSON.NET实现JSON、XML相互转换
- .net实体类与json相互转换
- java将JSON字符串转换为实体类对象,基于net.sf.json实现
- .net实体类与json相互转换
- Json字符串和Java实体类之间的相互转换(利用jackson实现)
- java将JSON字符串转换为实体类对象,基于net.sf.json实现
- 利用Handler实现网络数据下载Json并转换成实体类的封装
- jackson实体类转换json大小写及空字段忽略
- java和js中JSONObject,JSONArray,Map,String之间转换——持续更新中
- js中实现json格式的转换
- java 反射 将json对象转换为实体类
- 利用.NET中的反射机制实现IList到DataTable的转换
- 利用JQuery jsonp实现Ajax跨域请求 .Net 的*.handler 和 WebService,返回json数据
- 使用Jackson来实现Java对象与JSON的相互转换的教程
- python3 实现的对象与json相互转换操作示例
- c# +泛型+自定义属性 实现 DataTable转换成实体类
- JQuery扩展方法实现Form表单与Json互相转换