原文链接:[Gson Advanced — Custom Serialization for Simplification (Part 1)](https://futurestud.io/tutorials/gson-advanced-custom-serialization-part-1
)
原文出自:Norman Peitek
译者:無名無
本文将实现一个自定义的 Gson serialization 过程,有些情况我们可能会考虑到自定义,例如:和 server 通信时,有时候不需要传递一个完成 JSON 信息,只需要关键信息即可,接下来我们一步一步分析。
自定义序列化
有个这样的场景:App 从 服务器获取一个列表,用户可以订阅列表中的每一项,但是要将订阅的某一条发送给服务器同步。
我们一步一步实现:
Models
public class UserSimple {
private String name;
private String email;
private boolean isDeveloper;
private int age;
}
public class Merchant {
private int Id;
private String name;
// possibly more properties
}
用于解析完整列表的 Model:
public class UserSubscription {
String name;
String email;
int age;
boolean isDeveloper;
// new!
List<Merchant> merchantList;
}
问题
先看输出:
{
"age": 26,
"email": "norman@fs.io",
"isDeveloper": true,
"merchantList": [
{
"Id": 23,
"name": "Future Studio"
},
{
"Id": 42,
"name": "Coffee Shop"
}
],
"name": "Norman"
}
这是一个非常标准 JSON 的输出,但是在实际中,不可能是这么小的数据量,而且 Merchant 结构可能非常复杂,这就会造成 JSON 数据非常大,从而导致解析或传递耗时。
使用 @Expose 简化
我们第一个想到的方法是减少 Merchant 中不必要字段的序列化,使用之前学过的 @Expose 来简化 JSON,我们来调整下 Merchant:
public class Merchant {
private int Id;
@Expose(serialize = false)
private String name;
// possibly more properties
}