博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net——序列化与反序列化中对日期时间的处理
阅读量:7064 次
发布时间:2019-06-28

本文共 4085 字,大约阅读时间需要 13 分钟。

            承接上篇,现在我在类中加入一个日期时间类型的字段:

public  class Student    {       public string StudentId { get; set; }       public string Name { get; set; }       public int age { get; set; }       public string Address { get; set; }       public DateTime Birthday { get; set; }    }

       如果不对birthday这个类型处理的话,序列化之后就会出现这个问题:

{"Address":"北京朝阳区","Birthday":"\/Date(1434943392228+0800)\/","Name":"水田如雅","StudentId":"110","age":20}

       现在我们在原来的方法上面进行一个改进:

          

public static class JsonConvert    {        ///         /// Converts the obj to json.        ///         /// 
/// The t. ///
System.String.
///
Editor:v-liuhch CreateTime:2015/6/21 21:40:55
public static string ConvertObjToJson
(T t) { DataContractJsonSerializer ser = new DataContractJsonSerializer(t.GetType()); try { using (MemoryStream ms=new MemoryStream()) { ser.WriteObject(ms,t); string strJson=Encoding.UTF8.GetString(ms.ToArray()); //替换Json的date字符串 string p = @"\\/Date\((\d+)\+\d+\)\\/"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDataToDateString); Regex reg = new Regex(p); strJson = reg.Replace(strJson, matchEvaluator); return strJson; } } catch (IOException) { //自己处理异常吧 return null; } } ///
/// Jsons the deserialize. /// ///
///
The STR json. ///
``0.
///
Editor:v-liuhch CreateTime:2015/6/21 21:46:37
public static T JsonDeserialize
(string strJson) where T:class //约束T为class,也可以放宽类型,这里只是个例子,写着玩儿的,欧巴们,此处可改 { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); try { //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式 string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate); Regex reg = new Regex(p); strJson = reg.Replace(strJson, matchEvaluator); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson))) { T obj = ser.ReadObject(ms) as T; return obj; } } catch (IOException e) { //自己处理异常吧 return null; } } ///
/// Converts the json data to date string. /// ///
The m. ///
System.String.
///
Editor:v-liuhch CreateTime:2015/6/22 11:39:18
private static string ConvertJsonDataToDateString(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; } ///
/// Converts the date string to json date. /// ///
The m. ///
System.String.
///
Editor:v-liuhch CreateTime:2015/6/22 11:39:15
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; } }

            当然,在序列化的时候,我们可以不对日期时间做单独处理,拿到前台JS之后,再对数据进行一个整合过滤,这样,就不会固定死日期时间的返回格式,感觉这样比在后台处理好。

                     

转载地址:http://xhill.baihongyu.com/

你可能感兴趣的文章
libevent入门教程:Echo Server based on libevent
查看>>
.NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
查看>>
一次服务器CPU占用率高的定位分析
查看>>
安装office2007 1706错误
查看>>
crontab中执行多条命令
查看>>
25 JavaScript的幻灯片用于在Web布局的精彩案例
查看>>
用C语言写的迅雷看看XV文件提取器及C语言源代码
查看>>
ccpuid:CPUID信息模块 V1.01版,支持GCC(兼容32位或64位的Windows/Linux)
查看>>
用dom4j操作XML文档(收集)
查看>>
WinForm实例源代码下载
查看>>
hdu 1829 A Bug's Life(并查集)
查看>>
每日英语:Chinese Writer Wins Literature Nobel
查看>>
java中三种主流数据库数据库(sqlserver,db2,oracle)的jdbc连接总结
查看>>
Oracle Apps AutoConfig
查看>>
[leetcode]Flatten Binary Tree to Linked List
查看>>
css颜色代码大全:(网页设计师和平面设计师常用)
查看>>
boost 1.52在windows下的配置
查看>>
素材锦囊——50个高质量的 PSD 素材免费下载《上篇》
查看>>
【转】oc中消息传递机制-附:对performSelector方法的扩充
查看>>
oracle的nvl和sql server的isnull
查看>>