专栏首页james大数据架构JavaScriptSerializer 序列化json 时间格式

JavaScriptSerializer 序列化json 时间格式

 利用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;   
/// <summary>  
/// JSON序列化和反序列化辅助类  
/// </summary>  
public class JsonHelper  
{  
     /// <summary>  
    /// JSON序列化  
    /// </summary>  
     public static string JsonSerializer<T>(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;  
     }  
     /// <summary>  
     /// JSON反序列化  
     /// </summary>  
     public static T JsonDeserialize<T>(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;  
     }  
    
     /// <summary>  
     /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串  
     /// </summary>  
     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;  
     }  
     /// <summary>  
     /// 将时间字符串转为Json时间  
     /// </summary>  
     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<Person> list = new List<Person>()
   2: {
   3:     new Person(){ Name="张三", Age=28},
   4:     new Person(){ Name="李四", Age=25}
   5: };
   6:  
   7: string jsonString = JsonHelper.JsonSerializer<List<Person>>(list);

序列化结果:

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

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

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

      序列化结果:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 你真的会玩SQL吗?冷落的Top和Apply

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接、外连接 你真的会玩SQL吗?三范式、数据完整性 你真...

    欢醉
  • 数据自定义格式化

    如 <asp:Label ID="lblOne" runat="server" Text='<%# Bind("rq", "{0:yyyy年M月d日}") %>...

    欢醉
  • NET实现微信公共平台上传下载多媒体文件

          举个例子,有人对着我们的公共微信号拍个照片发送过来,然后我们处理这个照片,比如进行ocr识别字(随后就会降到这个例子),或者人脸识别,或者拍照取证等...

    欢醉
  • codeM美团编程大赛初赛B轮E题

    题目描述 给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=...

    xiaoxi666
  • Redis原子性写入HASH结构数据并设置过期时间

    Redis中提供了原子性命令SETEX或SET来写入STRING类型数据并设置Key的过期时间:

    雪飞鸿
  • OSG C++ 获取文件后缀 OSG修改文件后缀名

    在使用OSG开发时,可以使用OSG提供的接口快速实现文件后缀名的修改,而不用麻烦地自己去写C++代码。

    acoolgiser
  • 特斯拉“二号人物”、联合创始人兼CTO宣布离职,二季度巨亏4亿

    刚刚,马斯克宣布了一条重磅消息,特斯拉二号人物、公司联合创始人、担任CTO长达16年之久的元老JB Straubel将离职,不再担任公司的高管职位,转为“高级顾...

    新智元
  • 两张图看懂:面向对象编程的核心思想

    一个会写诗的程序员
  • 编程语言关系图谱 谁的影响力更大(图)

    当前哪门语言衍生出的族群最大?本文作者依据Haskell上的统计数据,结合两种算法(Force Atlas + Force Atlas 2 + Fructerm...

    一个会写诗的程序员
  • Python协程演进过程

    Milestone 协程相关的关键字和方法的引入: Python 2.2(2001年)yield Python 2.5(2006年) .send() .thro...

    Python中文社区

扫码关注云+社区

领取腾讯云代金券