Gson-自定义反序列化

作者:聂勇 欢迎转载,请保留作者信息并说明文章来源!
2015-阳塑十里画廊

上一篇文章《Gson教程-自定义序列化》介绍了使用Gson的自定义序列化满足一些业务场景下的需求。同样的,反序列化(JSON字符串转换成Java对象)也需要自定义,使用方式与序列化一样,两步搞定:

  1. 实现JsonDeserializer接口。
  2. 注册自定义的反序列化实现。

一、需求

1、有如下JSON字符串,需要转换成Person对象。

{“PersonName”:”aofeng”,”PersonAge”:32}

2、Person有两个属性:name和age,点击查看源代码

二、实现

1、自定义反序列化

实现JsonDeserializer接口的deserialize方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static class PersonDeserializer implements JsonDeserializer<Person> {
@Override
public Person deserialize(JsonElement jsonEle, Type type,
JsonDeserializationContext context)
throws JsonParseException {
JsonObject jo = jsonEle.getAsJsonObject();
String name = jo.get("PersonName").getAsString();
int age = jo.get("PersonAge").getAsInt();
Person obj = new Person(name, age);
return obj;
}
}

2、注册自定义的反序列化

创建一个GsonBuilder,使用registerTypeAdapter方法注册自定义的序列化实现,然后生成Gson对象来进行序列化。

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Person.class, new PersonDeserializer());
Gson gson = builder.create();
String json = "{\"PersonName\":\"aofeng\",\"PersonAge\":32}";
Person obj = gson.fromJson(json, Person.class);
System.out.println(obj);
}

运行上述代码,输出信息如下:

Person [name=aofeng, age=32]

附:完整的源代码

三、参考资料