博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScriptSerializer 序列化json 时间格式
阅读量:6817 次
发布时间:2019-06-26

本文共 3992 字,大约阅读时间需要 13 分钟。

利用JavaScriptSerializer 序列化json 时间格式,得到的DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,显然要进行转换

1.利用字符串直接替换

Model m = new Model { Id = 1, Dt = DateTime.Now };        JavaScriptSerializer js = new JavaScriptSerializer();        string str = js.Serialize(m);        str = Regex.Replace(str, @"\\/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("yyyy-MM-dd HH:mm:ss");        });        Response.Write(str);//{"Id":1,"Dt":"2011-08-17 17:38:47"}

 

 

2.JsonHelper

 

using System;using System.Collections.Generic;using System.Linq;using System.Web;   using System.Runtime.Serialization.Json;   using System.IO;   using System.Text;   using System.Text.RegularExpressions;   ///   /// JSON序列化和反序列化辅助类  ///   public class JsonHelper  {       ///       /// JSON序列化      ///        public static string JsonSerializer
(T t)       {           DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));           MemoryStream ms = new MemoryStream();          ser.WriteObject(ms, t);           string jsonString = Encoding.UTF8.GetString(ms.ToArray());           ms.Close();           //替换Json的Date字符串           string p = @"///Date/((/d+)/+/d+/)///"; /*Date/((([/+/-]/d+)|(/d+))[/+/-]/d+/)*/         MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);            Regex reg = new Regex(p);           jsonString = reg.Replace(jsonString, matchEvaluator);           return jsonString;       }       /// 
       /// JSON反序列化       ///        public static T JsonDeserialize
(string jsonString)       {           //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"//Date(1294499956278+0800)//"格式           string p = @"/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}";          MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);          Regex reg = new Regex(p);           jsonString = reg.Replace(jsonString, matchEvaluator);           DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));          MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));           T obj = (T)ser.ReadObject(ms);           return obj;       }           /// 
       /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串       ///        private static string ConvertJsonDateToDateString(Match m)       {           string result = string.Empty;           DateTime dt = new DateTime(1970,1,1);           dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));           dt = dt.ToLocalTime();           result = dt.ToString("yyyy-MM-dd HH:mm:ss");          return result;       }       /// 
       /// 将时间字符串转为Json时间       ///        private static string ConvertDateStringToJsonDate(Match m)       {           string result = string.Empty;           DateTime dt = DateTime.Parse(m.Groups[0].Value);           dt = dt.ToUniversalTime();           TimeSpan ts = dt - DateTime.Parse("1970-01-01");           result = string.Format("///Date({0}+0800)///",ts.TotalMilliseconds);          return result;      }   }

 

List<T>序列化:

 

 1: List
 list = new List
()

 

   2: {

 

   3:     new Person(){ Name="张三", Age=28},

 

   4:     new Person(){ Name="李四", Age=25}

 

   5: };

 

   6:

 

   7: string jsonString = JsonHelper.JsonSerializer
>(list);

 

 

序列化结果:

 

"[{/"Age/":28,/"Name/":/"张三/"},{/"Age/":25,/"Name/":/"李四/"}]"

 

    字典不能直接用于JSON,Dictionary字典转化为JSON并不是跟原来的字典格式一致,而是形式以Dictionary的Key作为名称”Key“的值,以Dictionary的Value作为名称为”Value“的值 。如:

 

   1: Dictionary
 dic = new Dictionary
();
   2: dic.Add("Name", "张三");
   3: dic.Add("Age", "28");
   4:
   5: string jsonString = JsonHelper.JsonSerializer < Dictionary
>(dic);

 

      序列化结果:

 

   1: "[{/"Key/":/"Name/",/"Value/":/"张三/"},{/"Key/":/"Age/",/"Value/":/"28/"}]"

本文转自xmgdc51CTO博客,原文链接:http://blog.51cto.com/12953214/1941201 ,如需转载请自行联系原作者

你可能感兴趣的文章