[C#] JavaScriptSerializer 時間格式

2012-10-31

 

之前有篇文章寫過 有關於 .Net 內建的 JSON 序列化跟反序列化方式..

關於JSON 格式的序列化

這幾天發現日期會有對不起來的現象..因為之前JSON.net 用太習慣..

透過 .Net 內建的 JavaScriptSerializer 所產生的JSON

User donma=new User{Name = "Donma",Birth = new DateTime(2012,12,21)};
System.Web.Script.Serialization.JavaScriptSerializer objSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonStr1 = objSerializer.Serialize(donma);


JSON :  {"Name":"Donma","Birth":"\/Date(1356019200000)\/"}



透過 JSON.net 還原 :  2012/12/20 下午 04:00:00


透過 JavaScriptSerializer  還原: 2012/12/20 下午 04:00:00



他的日期格式是UTC time..


之後我使用JSON.net 還原 印出來的日期 是 2012/12/20 下午 04:00:00


差了八小時..所以因為台灣時間是+8 所以她記錄的時間是算回+0 的時間


如果是 透過JSON.net 轉換


var donmaJson=JsonConvert.SerializeObject(donma);
Response.Write(donmaJson + "<br />");



JSON : {"Name":"Donma","Birth":"2012-12-21T00:00:00"}



 



透過 JSON.net 還原 :  2012/12/21 上午 12:00:00


透過 JavaScriptSerializer  還原: 2012/12/21 上午 12:00:00


他是透過文字方式記錄,所以跟你敘述的時段是正常的…


這一點真的需要注意一下…


這沒有所謂的對錯跟好壞,但是就是看需求要決定,不過一般的狀況下使用JSON.net 序列跟反序列化 會比較符合使用..


但是之前有做過一個關於 bid 的網站,因為考慮到跨國競標,這時候我一定會去使用 JavaScriptSerializer  處理,那時候光是計算Javascript 跟 .Net Server 的  UTC 轉換就花了很多時間…


當麻許的超技八 2014 | Donma Hsu Design.