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

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

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

JsonSerializer

JsonDeserializer

和两个方法:

//序列化
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, JsonDeserializer {

	@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);
	}
	
}


你可能感兴趣的:(JAVA)