C# JSON类DataContractJsonSerializer序列化DateTime原理分析

C#常用JSON类有两个:JavascriptSerializer和DataContractJsonSerializer,它们对同一DateTime对象(2013/7/4 12:00:00)序列化结果如下:

引用内容 引用内容
JavascriptSerializer序列化:\/Date(1372910400000)\/
DataContractJsonSerializer序列化:\/Date(1372910400000+0800)\/

1372910400000是怎么得来的?简单说明如下:

DateTime basetime = DateTime.Parse("1970-01-01");
DateTime time = DateTime.Parse("2013/7/4 12:00:00");
long ticks = (time.ToUniversalTime().Ticks - basetime.Ticks) / 10000;
//long ticks = (long)(time.ToUniversalTime() - basetime).TotalMilliseconds;
Console.WriteLine(ticks); //1372910400000

知道了原理,反序列化时处理如下:

DateTime basetime = DateTime.Parse("1970-01-01");
long ticks = basetime.Ticks + 1372910400000 * 10000;
DateTime time = new DateTime(ticks).ToLocalTime();
Console.WriteLine(time); //2013/7/4 12:00:00

客户端Javascript处理方法:

var time=new Date();
time.setTime(1372910400000);
alert(time);



评论: 0 | 引用: 0 | 查看次数: 5646
发表评论
登录后再发表评论!