作者:聂勇 欢迎转载,请保留作者信息并说明文章来源!
上一篇文章《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]
附:完整的源代码
三、参考资料