# TypeAdapter JsonSerializer 与 JsonDeserializer @JsonAdapter 类的序列化与反序列化 @SEE @JsonAdapter篇 和 序列化null值 方式1: JsonSerializer 与 JsonDeserializer 可以 自动的与 @JsonAdapter 使用 方式2: 也可以手动注册到 registerTypeAdapter中去。 方式1的案例 见 date时间类型的转换 方式2的案例 见自定义类型的转换
关于日期形式的序列化
package sun.rain.amazing.gson.serializer; import com.google.gson.*; import java.lang.reflect.Type; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * @author sunRainAmazing */ public class DateSerializer implements JsonSerializer<Date>,JsonDeserializer<Date> { private DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); /** * * @param src 所需要序列化的值 * @param typeOfSrc 序列化的类型 * @param context 序列化的操作 * @return */ @Override public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { return context.serialize(df.format(src)); } @Override public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { /** * 若读取到的字符串 为 "" 或者 "null" * 则返回 null */ String res = json.getAsString(); if (res.length()<5){ return null; } try { return df.parse(res); } catch (ParseException e) { throw new JsonParseException("日期格式不正确 应该为 yyyy-MM-dd"); } } }
package sun.rain.amazing.gson.serializer; import com.google.gson.*; import java.lang.reflect.Type; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * @author sunRainAmazing */ public class DateTimeSerializer implements JsonSerializer<Date>,JsonDeserializer<Date> { private DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** * * @param src 所需要序列化的值 * @param typeOfSrc 序列化的类型 * @param context 序列化的操作 * @return */ @Override public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { return context.serialize(df.format(src)); } @Override public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { /** * 若读取到的字符串 为 "" 或者 "null" * 则返回 null */ String res = json.getAsString(); if (res.length()<5){ return null; }