JavascriptSerializer序列化反序列化DateTime问题

JSON格式不直接支持日期和时间。
DateTime值值显示为“/Date(1522303200000+0800)/”形式的JSON字符串,其中第一个数字(在提供的示例中为 1522303200000)是GMT 时区中自1970年1月1日午夜以来按正常时间(非夏令时)经过的毫秒数。
该数字可以是负数,以表示之前的时间。
示例中包括“+0800”的部分可选,它指示该时间属于Local类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为UTC时间。

使用JavascriptSerializer序列化时把时间转成了UTC时间,而反序列化时不会转回本地时间。导致时间少了8小时,如:

JavaScriptSerializer js = new JavaScriptSerializer();
Person p = new Person();
p.Name = "张三";
p.Age = 28;
p.LastLoginTime = new DateTime(2018, 3, 29, 14, 0, 0);
string jsonString = js.Serialize(p);
Console.WriteLine(jsonString);
 
Person p1 = js.Deserialize<Person>(jsonString);
Console.WriteLine(p1.LastLoginTime.ToString());
Console.ReadKey();

结果:

发现反序列化后的时间少了8小时。


解决办法:
1、调用的时候,使用ToLocalTime方法,转换成本地时间。
如:
Convert.ToDateTime(p1.LastLoginTime).ToLocalTime()

2、使用其他JSON序列化方法

(1)使用Newtonsoft.Json或者DataContractJsonSerializer封装工具类,如:

 使用示例:

 结果:


(2)其他自定义工具类,如:

使用示例:

 结果:

 

参考:
https://www.cnblogs.com/talentzemin/p/5691521.html
https://blog.csdn.net/cncdns/article/details/6164389

 

posted @   skybirdzw  阅读(1317)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示