C#使用JavaScriptSerializer序列化時的時間類型處理
最近在做一個數(shù)據(jù)交換服務(wù)接口,用的 .NET Web API 項目。需要監(jiān)控每次請求的數(shù)據(jù),也就是操作日志。請求數(shù)據(jù)為實體對象,所以我用了序列化將請求內(nèi)容讀取并寫入日志。咋一看,好像并沒有什么問題,但是時間卻不是我們平??吹降母袷?。效果圖是這樣的:
猜測這里是由于 js 初始化時間的時候往往是向 1970/01/01 添加毫秒數(shù),JavaScriptSerializer 進(jìn)行序列化的時候也會格式化為距離1970/01/01 到當(dāng)前時間點(diǎn) GMT+0 時間的毫秒數(shù),如果直接反序列化可以看到少了8小時,且時間精度到毫秒,原來初始化的時間精度是 10-7 秒。
這種時間格式是使用于 js 的,但如果我們想把這個信息保存的話,這樣的時間格式不適合閱讀。因此需要做一下轉(zhuǎn)換。以下代碼利用正則表達(dá)式將毫秒數(shù)轉(zhuǎn)換成本時區(qū)的時間格式:
/// <summary> /// 序列化請求數(shù)據(jù) /// </summary> /// <param name="obj">請求數(shù)據(jù)</param> /// <returns></returns> public string LocalSerialize(object obj) { var jser = new System.Web.Script.Serialization.JavaScriptSerializer(); var json = jser.Serialize(obj); //將時間格式轉(zhuǎn)換為適合閱讀習(xí)慣的格式 json = System.Text.RegularExpressions.Regex.Replace(json, @"\\/Date\((\d+)\)\\/", match => { DateTime dt = new DateTime(1970, 1, 1); dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value)); dt = dt.ToLocalTime(); //本地時間 return dt.ToString(); ; }); return json; }
然后再調(diào)用該方法就可以了。完成后的效果圖:
至此完成了轉(zhuǎn)換。
本文參考:C# JavaScriptSerializer序列化時的時間處理詳解
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- django restframework serializer 增加自定義字段操作
- django rest framework serializers序列化實例
- django rest framework serializer返回時間自動格式化方法
- Django Serializer HiddenField隱藏字段實例
- django序列化serializers過程解析
- django自帶serializers序列化返回指定字段的方法
- django Serializer序列化使用方法詳解
- 詳解django的serializer序列化model幾種方法
- C# xmlSerializer簡單用法示例
- 淺析JavaScriptSerializer類的序列化與反序列化
- C#中JavaScriptSerializer幫助類用法實例
- Python基于Serializer實現(xiàn)字段驗證及序列化
相關(guān)文章
Winform中GridView分組排序功能實現(xiàn)方法
這篇文章主要介紹了Winform中GridView分組排序功能實現(xiàn)方法,以實例形式詳細(xì)說明了分組排序的實現(xiàn)方法,并附帶完整的DBHelp類代碼,是非常實用的技巧,需要的朋友可以參考下2014-11-11