`
ch_kexin
  • 浏览: 897830 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

JSON序列化和反序列化日期时间的处理

    博客分类:
  • JAVA
 
阅读更多

JSON格式不直接支持日期和时间。DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,其中第一个数字(在提供的示例中为 700000)是 GMT 时区中自 1970 年 1 月 1 日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括“+0500”的部分可选,它指示该时间属于Local类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为Utc。

     修改Person类,添加LastLoginTime:

 

[c-sharp] view plaincopy
  1. public class Person  
  2. {     
  3. public string Name { getset; }     
  4. public int Age { getset; }  
  5. public DateTime LastLoginTime { getset; }     
  6.  }  

 

 

[c-sharp] view plaincopy
  1. Person p = new Person();     
  2. p.Name = "张三";     
  3. p.Age = 28;     
  4. p.LastLoginTime = DateTime.Now;     
  5. string jsonString = JsonHelper.JsonSerializer<Person>(p);  

 

序列化结果:

{"Age":28,"LastLoginTime":"//Date(1294499956278+0800)//","Name":"张三"}

     1 、在后台使用正则表达式对其替换处理。修改JsonHelper:

 

[c-sharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;     
  5. using System.Runtime.Serialization.Json;     
  6. using System.IO;     
  7. using System.Text;     
  8. using System.Text.RegularExpressions;     
  9. /// <summary>    
  10. /// JSON序列化和反序列化辅助类    
  11. /// </summary>    
  12. public class JsonHelper    
  13. {    
  14.      /// <summary>    
  15.     /// JSON序列化    
  16.     /// </summary>    
  17.      public static string JsonSerializer<T>(T t)    
  18.      {    
  19.          DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));    
  20.          MemoryStream ms = new MemoryStream();    
  21.         ser.WriteObject(ms, t);    
  22.          string jsonString = Encoding.UTF8.GetString(ms.ToArray());    
  23.          ms.Close();    
  24.          //替换Json的Date字符串    
  25.          string p = @"///Date/((/d+)/+/d+/)///"/*////Date/((([/+/-]/d+)|(/d+))[/+/-]/d+/)////*/  
  26.          MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);    
  27.           Regex reg = new Regex(p);    
  28.          jsonString = reg.Replace(jsonString, matchEvaluator);    
  29.          return jsonString;    
  30.      }    
  31.      /// <summary>    
  32.      /// JSON反序列化    
  33.      /// </summary>    
  34.      public static T JsonDeserialize<T>(string jsonString)    
  35.      {    
  36.          //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"//Date(1294499956278+0800)//"格式    
  37.          string p = @"/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}";    
  38.         MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);    
  39.         Regex reg = new Regex(p);    
  40.          jsonString = reg.Replace(jsonString, matchEvaluator);    
  41.          DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));    
  42.         MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));    
  43.          T obj = (T)ser.ReadObject(ms);    
  44.          return obj;    
  45.      }    
  46.       
  47.      /// <summary>    
  48.      /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串    
  49.      /// </summary>    
  50.      private static string ConvertJsonDateToDateString(Match m)    
  51.      {    
  52.          string result = string.Empty;    
  53.          DateTime dt = new DateTime(1970,1,1);    
  54.          dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));    
  55.          dt = dt.ToLocalTime();    
  56.          result = dt.ToString("yyyy-MM-dd HH:mm:ss");    
  57.         return result;    
  58.      }    
  59.      /// <summary>    
  60.      /// 将时间字符串转为Json时间    
  61.      /// </summary>    
  62.      private static string ConvertDateStringToJsonDate(Match m)    
  63.      {    
  64.          string result = string.Empty;    
  65.          DateTime dt = DateTime.Parse(m.Groups[0].Value);    
  66.          dt = dt.ToUniversalTime();    
  67.          TimeSpan ts = dt - DateTime.Parse("1970-01-01");    
  68.          result = string.Format("///Date({0}+0800)///",ts.TotalMilliseconds);    
  69.         return result;    
  70.     }    
  71.  }  

 

 序列化Demo:

 

[c-sharp] view plaincopy
  1. Person p = new Person();     
  2. p.Name = "张三";     
  3. p.Age = 28;     
  4. p.LastLoginTime = DateTime.Now;    
  5. string jsonString = JsonHelper.JsonSerializer<Person>(p);  

 

运行结果:

{"Age":28,"LastLoginTime":"2011-01-09 01:00:56","Name":"张三"}

       反序列化Demo:

string json = "{/"Age/":28,/"LastLoginTime/":/"2011-01-09 00:30:00/",/"Name/":/"张三/"}";
p=JsonHelper.JsonDeserialize<Person>(json);

        运行结果:

在后台替换字符串适用范围比较窄,如果考虑到全球化的有多种语言还会更麻烦。

     2、利用JavaScript处理

 

[javascript] view plaincopy
  1. function ChangeDateFormat(jsondate) {     
  2.     jsondate = jsondate.replace("/Date(""").replace(")/""");     
  3.     if (jsondate.indexOf("+") > 0) {    
  4.         jsondate = jsondate.substring(0, jsondate.indexOf("+"));     
  5.     }     
  6.      else if (jsondate.indexOf("-") > 0) {    
  7.          jsondate = jsondate.substring(0, jsondate.indexOf("-"));     
  8.      }     
  9.      
  10.     var date = new Date(parseInt(jsondate, 10));   
  11.      var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;    
  12.      var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();    
  13.      return date.getFullYear() + "-" + month + "-" + currentDate;    
  14.  }  

 

简单Demo :

ChangeDateFormat("//Date(1294499956278+0800)//");

     结果:

2011-1-8

 

分享到:
评论

相关推荐

    C++ JSON 序列化与反序列化

    C++的JSON序列化和反序列化是开发Web服务、网络通信或存储配置文件时必不可少的技术。选择合适的库并理解其工作原理,能帮助我们更高效地处理JSON数据。通过实践和学习,可以掌握更多高级技巧,如自定义序列化策略、...

    ASPNET中JSON的序列化和反序列化的方法

    下面将详细介绍***中JSON序列化和反序列化的几种方法以及如何处理日期时间类型的序列化和反序列化。 首先,了解JSON的基本格式是非常重要的。JSON的数据结构由对象(Object)、数组(Array)、字符串(String)、数字...

    Json序列化和反序列化

    Json序列化和反序列化是数据交换的一种常见方式,尤其在Web开发中广泛使用。它允许我们将对象转换为JSON(JavaScript Object Notation)格式的字符串,以便在网络上传输,然后在接收端将这些字符串还原为原来的对象...

    Json序列化与反序列化

    总结来说,JSON序列化与反序列化是现代Web开发中不可或缺的一部分,它提供了数据交换的标准格式,使得不同语言和平台之间的数据交互变得简单高效。正确理解和使用这一技术,能够极大地提升开发效率和软件的可维护性...

    delphi_JSON序列化反序列化

    本篇将深入探讨Delphi中的JSON序列化和反序列化技术。 一、JSON简介 JSON是一种独立于语言的数据表示格式,它基于ECMAScript的一个子集。一个有效的JSON对象通常包含键值对(key-value pairs)的集合,数组或其他...

    json数据序列化和反序列化

    总之,JSON序列化和反序列化在Web开发中扮演着核心角色,它们使数据能够在客户端和服务器之间以及本地存储中高效地传递和管理。通过理解并熟练运用这些概念,开发者能够构建出更加灵活和可扩展的应用程序。

    VB.NET XML和JSON序列化与反序列化

    在VB.NET编程环境中,XML和JSON序列化与反序列化是常见的数据处理技术,用于将对象转换为文本格式(XML或JSON),以便于存储、传输和解析。这两者都是轻量级的数据交换格式,广泛应用于Web服务和客户端应用程序之间...

    Json序列化与反序列化详解

    一、什么是JSON序列化与反序列化? 1. JSON序列化:序列化是指将Java对象转换为JSON字符串的过程,使得数据可以被存储或通过网络传输。这样做的好处是,JSON格式的数据可以在多种语言之间进行互操作,并且易于理解和...

    Java Json序列化与反序列化

    总结,Java中的JSON序列化与反序列化是数据交互的重要环节,Jackson和Gson是两个常用的库,它们提供了丰富的功能和良好的API设计,使得处理JSON数据变得简单高效。通过理解和掌握这些知识,开发者可以更好地在Java...

    Json序列化反序列化工具:JsonToolsJson序列化反序列化工具:JsonTools Json序列化反序列化工具:JsonTools

    JsonTools是一个不错的JSON序列化和反序列化功能包

    Json反序列化

    反序列化是将JSON格式的字符串转换为程序可直接使用的对象的过程,这对于处理网络请求返回的数据至关重要。在本篇文章中,我们将深入探讨JSON反序列化的概念、原因以及在实际开发中的应用。 一、什么是JSON反序列化...

    jackson json序列化,反序列化所需jar包

    Jackson是Java领域中广泛使用的JSON处理库,它提供了高效的JSON序列化和反序列化功能。在Java应用程序中,我们经常需要将Java对象转换为JSON字符串(序列化)或从JSON字符串恢复Java对象(反序列化),Jackson库就是...

    json序列化与反序列化处理代码(java版本)

    极好的序列化与发序列化代码。可以处理array集合,数组或者单个对象等的序列化与反序列化。

    C# 后台序列化Json序列、反序列化Json序列(三种方法)

    在.NET开发中,C#语言提供了多种方式来处理JSON序列化和反序列化,这对于数据交换和存储至关重要。本文将详细介绍C#中处理JSON的三种主要方法:使用Json.NET库(Newtonsoft.Json)、使用.NET Framework自带的System....

    Json.net在后台对Json序列化和反序列化

    Json.NET是.NET开发中广泛使用的第三方库,由James Newton-King 开发,它提供了一套高效且功能丰富的JSON序列化和反序列化的解决方案。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web...

    Json序列化与反序列化方法封装类

    /// Json序列化与反序列化方法封装类 /// public static class JsonConvert { /// /// 序列化模型对象为Json /// /// 模型类型 /// 模型对象 /// &lt;returns&gt;&lt;/returns&gt; public static string GetJson(T...

    net Json 序列化和反序列化

    只要对json和序列化和反序列化总结,以及代码的案例:我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET。

    .net 序列化和反序列化 Json

    .NET框架中的序列化和反...总之,理解和掌握.NET中的JSON序列化和反序列化是开发Web服务和客户端应用的关键技能,无论选择使用内置方法还是第三方库如Json.NET,都需要根据项目需求来权衡性能、功能和依赖管理等因素。

    JSON序列化及反序列化工具

    阿里反序列化时间 409 423 412 HZS序列化时间 884 864 880 HZS反序列化时间 392 375 394 JAVA7版已经逼近阿里的速度,JAVA8版利用了闭包技术,充份发挥多核优势,已经超过阿里的速度。 测试代码如下: { org.hzs....

Global site tag (gtag.js) - Google Analytics