1,实现一个类型适配器(TypeAdapter)

自定义类型适配器需要实现两个接口:

JsonSerializer<T>

JsonDeserializer<T>

和两个方法:

  1. //序列化
  2. public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context);
  1. //反序列化
  2. public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
  3. throws JsonParseException;

其中 JsonElement 的类层次为:

2,注册类型适配器

  1. Gson gson = new GsonBuilder()
  2. .registerTypeAdapter(Timestamp.class, new TimestampAdapter())
  3. .create();

3,自己写的一个 Timestamp 类型适配器

    1. package com.gdsc.core.adapter;
    2. import java.lang.reflect.Type;
    3. import java.sql.Timestamp;
    4. import com.google.gson.JsonDeserializationContext;
    5. import com.google.gson.JsonDeserializer;
    6. import com.google.gson.JsonElement;
    7. import com.google.gson.JsonParseException;
    8. import com.google.gson.JsonPrimitive;
    9. import com.google.gson.JsonSerializationContext;
    10. import com.google.gson.JsonSerializer;
    11. /**
    12. * Gson TypeAdapter
    13. * 实现了 Timestamp 类的 json 化
    14. * @author linwei
    15. *
    16. */
    17. public class TimestampAdapter implements JsonSerializer<Timestamp>, JsonDeserializer<Timestamp> {
    18. @Override
    19. public Timestamp deserialize(JsonElement json, Type typeOfT,
    20. JsonDeserializationContext context) throws JsonParseException {
    21. if(json == null){
    22. return null;
    23. } else {
    24. try {
    25. return new Timestamp(json.getAsLong());
    26. } catch (Exception e) {
    27. return null;
    28. }
    29. }
    30. }
    31. @Override
    32. public JsonElement serialize(Timestamp src, Type typeOfSrc,
    33. JsonSerializationContext context) {
    34. String value = "";
    35. if(src != null){
    36. value = String.valueOf(src.getTime());
    37. }
    38. return new JsonPrimitive(value);
    39. }
    40. }

Gson 基础教程 —— 自定义类型适配器(TypeAdapter)的更多相关文章

  1. Java基础教程——枚举类型

    枚举类型 枚举类型在JDK 5时引入. enum WeekEnum { MONDAY, TUESDAY, WEDNESDAY, THURDAY, FRIDAY, SATURDAY, SUNDAY } ...

  2. 自己定义GSON类型适配器

    Exception in thread "main" java.lang.RuntimeException: No-args constructor for class java. ...

  3. 《objective-c基础教程》学习笔记 (一)—— 开发环境配置和简单类型输出

    懒惰是富有最大的敌人,再不前进,我们就out了.最近工作比较轻松,不是很忙.于是想晚上下班回家学习点新东西.看着苹果大军的一天天壮大,心里也是痒痒的.于是就想先系统的学习下Objective-C,为之 ...

  4. [c#基础]泛型集合的自定义类型排序

    引用 最近总有种感觉,自己复习的进度总被项目中的问题给耽搁了,项目中遇到的问题,不总结又不行,只能将复习基础方面的东西放后再放后.一直没研究过太深奥的东西,过去一年一直在基础上打转,写代码,反编译,不 ...

  5. Xamarin图表开发基础教程(12)OxyPlot框架支持的金融图表类型

    Xamarin图表开发基础教程(12)OxyPlot框架支持的金融图表类型 OxyPlot组件中支持5种类型的金融图表,它们分别为销量图.高低图.股票K线图.股票走势图和旧式股票图,如图1.20~1. ...

  6. Xamarin图表开发基础教程(11)OxyPlot框架支持的图表类型

    Xamarin图表开发基础教程(11)OxyPlot框架支持的图表类型 OxyPlot组件中支持7种类型的条型图表,分别为普通条形图.线型条形图.矩形条形图.差值图.龙卷风图.普通柱形图和柱形误差图, ...

  7. Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型

    Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型 OxyPlot组件支持26种图表,这些图表按照功能和样式可以分为4大类,分别为线型图表.条型图表.金融图表和其它图表. 线型图表 ...

  8. Java基础教程:枚举类型

    Java基础教程:枚举类型 枚举类型 枚举是将一具有类似特性的值归纳在一起的方法.比如,我们可以将周一到周日设计为一个枚举类型.彩虹的七种颜色设计为一个枚举类型. 常量实现枚举 我们通过定义常量的方式 ...

  9. struts2基础---->自定义类型转换器

    这一章,我们开始struts2中自定义类型转换器的学习. 自定义类型转换器

随机推荐

  1. ReSharper warning: Virtual member call in a constructor

    1.构造函数的执行顺序是:基类--->派生类 2.如果虚方法被重写后,由于基类中调用了虚方法,此时调用的是最外层的被重写后的虚方法,此时可能会发生异常 举例: class Parent { pu ...

  2. 关于slideup和slidedown 鼠标多次滑过累积的动画效果

    stop() 方法停止当前正在运行的动画 包括animation动画和slideup/slidedown动画 例如:鼠标经过一个元素时,执行一个slide动画,多次快速经过,不处理的话这个元素会保留累 ...

  3. (转)SQL流程控制语句学习(一):变量及控制语句种类

    1.局部变量 用户自己定义的,称局部变量,以@标识. 作用范围:定义局部变量的批处理.存储过程.触发器和语句块 局部变量的定义: declare @局部变量名 数据类型 注意:变量的类型不能是text ...

  4. 【※索引】mysql索引常用命令

    索引分单列索引和组合索引.单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引.组合索引,即一个索包含多个列. MySQL索引类型包括: (1)普通索引 这是最基本的索引,它没 ...

  5. 设置Cacti图形标题能显示中文

    1.查看系统是否带有中文字体包 # ls /usr/share/fonts/chinese 如没有则安装 # yum -y install fonts-chinese   2.设置cacti使用的rr ...

  6. IOS开发,如何用最新的Itunes给手机装ipa文件

    搜了半天,发现网上的很多教“使用Itunes给手机装ipa文件”文字都好几年了,现在的Itunes跟过去几年的功能和界面都有很大改变,话不多说直接两句话讲明白,希望帮到需要的人. 使用Itunes给手 ...

  7. 详解boost库中的Message Queue .

    Message Queue(后文简写成MQ或消息队列)是boost库中用来封装进程间通信的一种实现,同一台机器上的进程或线程可以通过消息队列来进行通迅.消息队列中的消息由优先级.消息长度.消息数据三部 ...

  8. SQL Server 触发器(转)

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删 ...

  9. c#播放声音文件

    C#中声音的播放主要有三种方法: 1.使用API函数. 2.使用SoundPlayer类播放. 3.使用DirectX进行播放. 一.使用API函数进行播放. windows操作系统中的winmm.d ...

  10. redis常见命令

    一.介绍 1.Redis是什么 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis提供了一些丰富 ...