Gson 基础教程 —— 自定义类型适配器(TypeAdapter)

来源:互联网 发布:对虚拟网络的看法 编辑:程序博客网 时间:2024/06/18 06:58

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> {@Overridepublic 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;}}}@Overridepublic JsonElement serialize(Timestamp src, Type typeOfSrc,JsonSerializationContext context) {String value = "";if(src != null){value = String.valueOf(src.getTime());}return new JsonPrimitive(value);}}