作者:聂勇      欢迎转载,请保留作者信息并说明文章来源!

上一篇文章《Gson教程-自定义序列化》介绍了使用Gson的自定义序列化满足一些业务场景下的需求。同样的,反序列化(JSON字符串转换成Java对象)也需要自定义,使用方式与序列化一样,两步搞定:
- 实现JsonDeserializer接口。
- 注册自定义的反序列化实现。
一、需求
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]
附:完整的源代码
三、参考资料