Gson 基础教程 —— 自定义类型适配器(TypeAdapter)
1,实现一个类型适配器(TypeAdapter)
自定义类型适配器需要实现两个接口:
JsonSerializer<T>
JsonDeserializer<T>
和两个方法:
- //序列化
- public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context);
- //反序列化
- public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException;
其中 JsonElement 的类层次为:
2,注册类型适配器
- Gson gson = new GsonBuilder()
- .registerTypeAdapter(Timestamp.class, new TimestampAdapter())
- .create();
3,自己写的一个 Timestamp 类型适配器
- package com.gdsc.core.adapter;
- import java.lang.reflect.Type;
- import java.sql.Timestamp;
- import com.google.gson.JsonDeserializationContext;
- import com.google.gson.JsonDeserializer;
- import com.google.gson.JsonElement;
- import com.google.gson.JsonParseException;
- import com.google.gson.JsonPrimitive;
- import com.google.gson.JsonSerializationContext;
- import com.google.gson.JsonSerializer;
- /**
- * Gson TypeAdapter
- * 实现了 Timestamp 类的 json 化
- * @author linwei
- *
- */
- public class TimestampAdapter implements JsonSerializer<Timestamp>, JsonDeserializer<Timestamp> {
- @Override
- public Timestamp deserialize(JsonElement json, Type typeOfT,
- JsonDeserializationContext context) throws JsonParseException {
- if(json == null){
- return null;
- } else {
- try {
- return new Timestamp(json.getAsLong());
- } catch (Exception e) {
- return null;
- }
- }
- }
- @Override
- public JsonElement serialize(Timestamp src, Type typeOfSrc,
- JsonSerializationContext context) {
- String value = "";
- if(src != null){
- value = String.valueOf(src.getTime());
- }
- return new JsonPrimitive(value);
- }
- }
Gson 基础教程 —— 自定义类型适配器(TypeAdapter)的更多相关文章
- Java基础教程——枚举类型
枚举类型 枚举类型在JDK 5时引入. enum WeekEnum { MONDAY, TUESDAY, WEDNESDAY, THURDAY, FRIDAY, SATURDAY, SUNDAY } ...
- 自己定义GSON类型适配器
Exception in thread "main" java.lang.RuntimeException: No-args constructor for class java. ...
- 《objective-c基础教程》学习笔记 (一)—— 开发环境配置和简单类型输出
懒惰是富有最大的敌人,再不前进,我们就out了.最近工作比较轻松,不是很忙.于是想晚上下班回家学习点新东西.看着苹果大军的一天天壮大,心里也是痒痒的.于是就想先系统的学习下Objective-C,为之 ...
- [c#基础]泛型集合的自定义类型排序
引用 最近总有种感觉,自己复习的进度总被项目中的问题给耽搁了,项目中遇到的问题,不总结又不行,只能将复习基础方面的东西放后再放后.一直没研究过太深奥的东西,过去一年一直在基础上打转,写代码,反编译,不 ...
- Xamarin图表开发基础教程(12)OxyPlot框架支持的金融图表类型
Xamarin图表开发基础教程(12)OxyPlot框架支持的金融图表类型 OxyPlot组件中支持5种类型的金融图表,它们分别为销量图.高低图.股票K线图.股票走势图和旧式股票图,如图1.20~1. ...
- Xamarin图表开发基础教程(11)OxyPlot框架支持的图表类型
Xamarin图表开发基础教程(11)OxyPlot框架支持的图表类型 OxyPlot组件中支持7种类型的条型图表,分别为普通条形图.线型条形图.矩形条形图.差值图.龙卷风图.普通柱形图和柱形误差图, ...
- Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型
Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型 OxyPlot组件支持26种图表,这些图表按照功能和样式可以分为4大类,分别为线型图表.条型图表.金融图表和其它图表. 线型图表 ...
- Java基础教程:枚举类型
Java基础教程:枚举类型 枚举类型 枚举是将一具有类似特性的值归纳在一起的方法.比如,我们可以将周一到周日设计为一个枚举类型.彩虹的七种颜色设计为一个枚举类型. 常量实现枚举 我们通过定义常量的方式 ...
- struts2基础---->自定义类型转换器
这一章,我们开始struts2中自定义类型转换器的学习. 自定义类型转换器
随机推荐
- java09数组的使用
/** * 数组:存储相同数据类型的一组数据! * 声明一个数组就是在内存中开辟了一连串的连续空间! * * 数组和String 都是 引用数据类型 * 数组的使用 */ @Test public v ...
- Code First研究学习1_Reverse Enginner Code First
最近因为公司需要,自己开始研究Code First,之前还是听说过这个,也知道是代码优先的意思!至于具体怎么的代码优先,我的理解如下! 在听说code first的时候,心里也就觉得怪了,是怎么将M ...
- MySQL教程:数据库具体操作
1. 连接数据库服务器 $ ./mysql -h host_name -u user_name -p -h host_name(--host=host_name),连接的数据库主机名,如果在本地主机上 ...
- php改写session到数据库
session改写mysql 在调用 session_start();的地方改用实例化本类即可new SessionDB(); session_set_save_handler( array($thi ...
- 武汉科技大学ACM :1007: A+B for Input-Output Practice (VII)
Problem Description Your task is to Calculate a + b. Input The input will consist of a series of pai ...
- union关键字 与大小端模式
union 关键字(主要用来压缩空间,如果一些数据不可能同一时间同时用到,可是考虑使用union) union关键字声明的变量称之为联合体变量: (1)联合体变量只配置一个足够大的空间来容纳最大长度的 ...
- CListBox控件基本功能
创建CListBox对象 CListBox m_ListBox;关联控件 ,同时注意行数从 0 开始计算 1.向控件中添加内容 int AddString(LPCTSTR lpszItem ); ...
- uva 482 - Permutation Arrays
<int, double> --> <int, string> 从而避免了输出格式: #include <vector> #include <strin ...
- GetTextMetrics
该函数的参数要求是一个TEXTMETRIC结构体的指针 也就是说我们可以定义一个结构类型的变量 将该变量的地址传递进来 通过该函数就能得到当前字体的信息来填充这个结构体 int CXuexi2View ...
- v9站点自定义变量
打开 \phpcms\modules\admin\templates\site_edit.tpl.php 文件,找到最后一个 </fieldset> ,在他后面添加一下代码:<!-- ...