Gson 自定义类型适配器 (TypeAdapter)
Gson的TypeAapter可以理解成自定义序列化和返序列化。
自定义类型适配器需要实现两个接口:
JsonSerializer
JsonDeserializer
和两个方法:
//序列化
public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context);
//反序列化
public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)throws JsonParseException;
其中 JsonElement 的类层次为:
实例一:Timestamp 类型适配器
注册类型适配器:
Gson gson = new GsonBuilder()
.registerTypeAdapter(Timestamp.class, new TimestampAdapter())
.create();
自己写的一个 Timestamp 类型适配器
public class TimestampAdapter implements JsonSerializer
实例二:fistName,lastName就要以userName:firtName-lastName的格式展现。
Entry实体,用于保存firtName、lastName。
public class Entry {
private String firstName;
private String lastName;
public Entry(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
get()和set()方法省略......!
@Override
public String toString() {
return "Entry [firstName=" + firstName + ", lastName=" + lastName + "]";
}
}
自定义EntrySerializer类实现 JsonSerializer、JsonDeserializer接口,用来自定义转换。
public class EntrySerializer implements JsonSerializer
测试代码如下:
public class EntrySerializerTest {
public static void main(String[] args) {
GsonBuilder gsonBuilder = new GsonBuilder();
//注册适配器
gsonBuilder.registerTypeAdapter(Entry.class,new EntrySerializer())
.setPrettyPrinting();
//对结果格式化一下
Gson gson = gsonBuilder.create();
//我们去注册时,通常名字由两部分组成,fistName,lastName
Entry entry = new Entry("xia","liang");
User user = new User();
user.setUserName(entry);
user.setUserPwd("xl123");
user.setAge(24);
//序列化
String json = gson.toJson(user);
System.out.println("序列化结果:\n"+json);
//反序列化
user=gson.fromJson(json,User.class);
System.out.println("反序列化结果:\n"+user);
}
}
返回结果如下:
序列化结果:
{
"userName": "xia-liang",
"userPwd": "xl123",
"age": 24
}
反序列化结果:
User [userName=Entry [firstName="xia, lastName=liang"], userPwd=xl123, age=24]
【Gson 自定义类型适配器 (TypeAdapter)】
推荐阅读
- SpringBoot调用公共模块的自定义注解失效的解决
- python自定义封装带颜色的logging模块
- 列出所有自定义的function和view
- mysql|InnoDB数据页结构
- 接口|axios接口报错-参数类型错误解决
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 带你了解类型系统以及flow和typescript的基本使用
- 自定义MyAdapter
- 史前艺术的审美类型「清央美术」
- Android自定义view实现圆环进度条效果