JavaScriptSerializer名稱空間:
using System.Web.Script.Serialization
不需要再手動添加引用
不支持序列化Dictionary類型
DataContractJsonSerializer
名稱空間:
using System.Runtime.Serialization.Json
需要手動添加引用 System.Runtime.Serialization;
支持序列化Dictionary類型;
這兩個類型都是.NET自帶的,今天被它坑的地方是它在序列化DateTime類型的時候會把一個DateTime數據類型的值序列化為Date(286769410010)
的字符串,然后在反序列化的時候會把這個字符串序列化為UTC的標準時間,于是我們這種在東八區的時間,在序列化和反序列化之后就會少掉8個小時,你說坑不坑?!!!
其實,也是有解決方案的,就是在反序列化的時候指定時間類型為Local就好了,代碼如下
JavaScriptSerializer myJson = new JavaScriptSerializer();
DateTime myDate = DateTime.Now; //當前時間是2016-08-31 21:52:00
var strSerialized = myJson.Serialize(myDate);//序列化后的字符串是"\\\\/Date(1472651580499)\\\\/"
var strSerialized2 = JsonConvert.SerializeObject(myDate);//使用Json.net序列化后的字符串是"2016-08-31T21:53:00.4997647+08:00"
DateTime myDateDes = myJson.Deserialize<DateTime>(strSerialized);//反序列后就變成UTC時間了,會少掉8個小時
DateTime myDateDes1 = myJson.Deserialize<DateTime>(strSerialized).ToLocalTime();//加上ToLocalTime就是當地時間,即正確的時間
DateTime myDateDes2 = JsonConvert.DeserializeObject<DateTime>(strSerialized2);//使用Json.net反序列化后也是正確的時間,不需要考慮時區的問題
參考:
JavaScriptSerializer UTC DateTime issues
.net DateTime Serialization Deserialization bug
how to get Json.net serialize DateTime similar to JavaScriptSerializer?
為了這兩坑爹貨,我今天還委屈得跑廁所哭了半小時,這么大人了,有些丟臉,不過確實是累了,壓力有點兒大,無論是工作,還是論文……
我真的不是害怕擔責任,只是有些時候有些事情確實不是我能把空的,我想做好它,可是時間不允許……