今天在Android的Json反序列化过程中,Date类型无法转化成自己想要的格式,鉴于之前在C#的反序列话中也遇到过这个问题,解决的同时,顺手做个总结,供自己及需要的人日后查阅。

      将Datetime对象序列化成Json对象是常有的事情,微软的序列化方法会将Datetime对象序列化成一个字符串:"\/Date(1234656000000)\/",看了就觉得恶心,不知道大微软咋想的,可能我能想到我就能进入微软,升职,加薪,迎娶白富美,从此走向事业的巅峰,想想还有点小激动呢,哈哈哈····废话少说,上干货。
Json串:

[{UserName:"姚玉星",NickName:"Mensar",Sex:"男",Hobby:"女",Birthday:"/Date(1298605481453+0800)/"}]
 
 
调用场景一(此处没有反序列化的操作,但同样要操作Birthday数据):
  作为前端页面Ajax调用的返回值,此时只需要一个函数,将字符串转换成JavaScript的Date类型。

var formatTime=function(value){
var d= eval('new'+(value.replace(/\//g,'')));
return d;
}
 
 
 
 
调用场景二:
   C#后台调用,反序列化Json,添加Newtonsoft.Json.dll

User user = JavaScriptConvert.DeserializeObject(strJSON,typeof(User)) as User;

调用场景三:

  Android/Java调用服务,将Json反序列化,此处需要引用第三方jar包gson.jar。

User user = JsonHelper.parseObject(strJSON, User.class);

1.构建实体类

 1 public class User{
2 @Expose
3 public String UserName;
4 @Expose
5 public String NickName;
6 @Expose
7 public String Sex;
8 @Expose
9 public String Hobby;
10 @Expose
11 public Date Birthday;
12 }

2.封装的Json操作类

 1 /*
2 * @author 姚玉星
3 * Json相关类
4 */
5 public class JsonHelper {
6 // 反序列化json
7 public static <T> T parseObject(String jsonStr, Type type) {
8 GsonBuilder builder = new GsonBuilder();
9 // 不转换没有 @Expose 注解的字段
10 builder.excludeFieldsWithoutExposeAnnotation();
11 //由于gson没有反序列化Date的功能,此处自己构造一个DateTime的反序列化类,将其注册到GsonBuilder中
12 DateDeserializer ds = new DateDeserializer();
13 builder.registerTypeAdapter(Date.class, ds);
14 Gson gson = builder.create();
15 return gson.fromJson(jsonStr, type);
16 }
17 // 序列化Json
18 public static String toJson(Object object) {
19 GsonBuilder builder = new GsonBuilder();
20 // 不转换没有 @Expose 注解的字段
21 builder.excludeFieldsWithoutExposeAnnotation();
22 Gson gson = builder.create();
23 return gson.toJson(object);
24 }
25 }
26 class DateDeserializer implements JsonDeserializer<Date> {
27 public Date deserialize(JsonElement json, Type typeOfT,
28 JsonDeserializationContext context) throws JsonParseException {
29 String JSONDateToMilliseconds = "\\/(Date\\((.*?)(\\+.*)?\\))\\/";
30 Pattern pattern = Pattern.compile(JSONDateToMilliseconds);
31 Matcher matcher = pattern.matcher(json.getAsJsonPrimitive()
32 .getAsString());
33 String result = matcher.replaceAll("$2");
34 return new Date(new Long(result));
35 }
36 }

反序列化 DateTime对象问题的更多相关文章

  1. DateTime对象反序列化的那些事

    今天在Android的Json反序列化过程中,Date类型无法转化成自己想要的格式,鉴于之前在C#的反序列话中也遇到过这个问题,解决的同时,顺手做个总结,供自己及需要的人日后查阅.       将Da ...

  2. C#序列化及反序列化Json对象通用类JsonHelper

    当今的程序界Json大行其道.因为Json对象具有简短高效等优势,广受广大C#码农喜爱.这里发一个序列化及反序列化Json对象通用类库,希望对大家有用. public class JsonHelper ...

  3. Java IO详解(六)------序列化与反序列化(对象流)

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  4. python中将datetime对象转化为时间戳

    从mongodb中读取出来的记录中,时间存储在datetime对象里,返回给客户端的却要求是时间戳格式,因此需要将对应的datetime时间转化为时间戳,从stackoverflow上找到同样的问题和 ...

  5. 《将一个字符串转换成datetime时,先分析该字符串以获取日期,然后再将每个变量放置到datetime对象中》的解决办法

    我们在写代码时,稍不注意就收到VS那文不对题的错误提示. 最近在项目上碰到了“将一个字符串转换成datetime时,先分析该字符串以获取日期,然后再将每个变量放置到datetime对象中”的这个错误提 ...

  6. python中datetime模块中datetime对象的使用方法

    本文只讲述datetime模块中datetime对象的一些常用的方法,如果读者需要更多datetime模块的信息,请查阅此文档. datetime模块的对象有如下: timedelta date da ...

  7. SQL SERVER中Datetime时间的范围与.net的DateTime对象的区别

    对于编写.net程序中我们一般写默认的时间,我们会自动创建一个new DateTime()对象.但与SQL SERVER连用我们就会出现一个时间范围的问题. 今天我就记录一下该时间问题. 我们创建的n ...

  8. 在MVC中使用Json.Net序列化和反序列化Json对象

    在.Net的MVC开发中,经常会使用到Json对象,于是,系统提供了JsonResult这个对象,其本质是调用.Net系统自带的Json序列化类JavaScriptSerializer对数据对象进行序 ...

  9. Serializer序列化/反序列化DateTime少了8小时问题解决

    1.举例子 JavascriptSerializer serializer = new JavascriptSerializer(); DateTime now = DateTime.Parse(&q ...

随机推荐

  1. php 随机显示据今天30天内的任意一天

    function randomDate() { //echo date( "Y-m-d H:m:s", $newtime); //echo date("Y-m-d H:m ...

  2. python使用platform模块获取系统环境并去除换行符

    近来在porting一个网站,企图拿到这个网站的数据来做分析.为了支持多系统环境的正常运行.需要知道当前系统环境的是什么OS? 1.python内置platform库.可以很方便得到当前系统环境时什么 ...

  3. Python——学习笔记

    list  ['','',''] 类似PHP数组   可以修改 tuple  ('','')  不能修改其中的元素 切片 list[int 开始: int 结束: int 间隔=1] 字符串也可以看成 ...

  4. JS之路——日期函数

    时间对象是一个我们经常要用到的对象,无论是做时间输出.时间判断等操作时都与这个对象离不开.除开JavaScript中的时间对象外,在VbScript中也有许多的时间对象,而且非常好用.下面还是按照我们 ...

  5. 关于-webkit-tap-highlight-color的一些事儿

    这个属性只用于iOS (iPhone和iPad).当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就会出现一个半透明的灰色背景.要重设这个表现,你可以设置-webkit-tap- ...

  6. WinDebug 常用命令表【摘】

    启动, 附加进程, 执行和退出(Starting, Attaching, Executing and Exiting) ======================= Start -> All ...

  7. PS5穿越云层3D文字

    妈的,搜狗浏览器有时候会出问题,保存的内容找不到了…… 视图--显示参考线或者“显示额外内容”会取消或者加上参考线,后者功能更强一些,ctrl+D有时可以代替后者的功能,后者可以去掉蒙版的参考线,前者 ...

  8. What qualities characterize a great PhD student

    省理工计算机教授David Karger接触了许多世界上最杰出的博士生,近日总结出了优秀博士通常具备的五点品质:0 过人的智力 1 好奇心 2 创造力 3 纪律性与生产力 4 与观众沟通 5 与伙伴沟 ...

  9. Coupons

    uva10288:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&am ...

  10. poj Building a Space Station

    http://poj.org/problem?id=2031 #include<cstdio> #include<cstring> #include<cmath> ...