Gson为了简化序列化和反序列化的过程,提供了很多注解,这些注解大致分为三类,我们一一的介绍一下。
- 自定义字段的名字
@SerializedName("w");
int width
这个注解可以用来自定义序列化和反序列化过程中字段的名字。
以上面为例,当序列化的时候,会把Java bean中的字段width
存储成w
,在反序列化的时候会把Json的w
这个key反序列化到Java bean的width
字段上。
- 定义那些字段需要被序列化或者反序列化
注意,在Java中,所有用transient声明的字段,都不会被Gson序列化和反序列化
Gson提供了注解来分别的控制某一个字段是否需要被序列化或者反序列化。对序列化和反序列化分开控制。
使用@Expose注解,我们可以对序列化和反序列化单独控制,该注解有两个值,分别是deserialize和serialize,比如如下的例子
public class Account {
//声明该字段不参与反序列化
@Expose(deserialize = false)
private String accountNumber;
//只要有一个字段使用了Expose注解,所有需要参与序列化和反序列化的字段都要有这个注解
//因为这个注解要么不生效,如果生效的话,就只会对有Expose注解的字段进行处理。
@Expose
private String iban;
//声明该字段不参与序列化
@Expose(serialize = false)
private String owner;
//声明该字段序列化和反序列化都不参与
@Expose(serialize = false, deserialize = false)
private String address;
private String pin;
}
要使该注解生效,必须对Gson进行配置,如下
GsonBuilder builder = new GsonBuilder();
builder.excludeFieldsWithoutExposeAnnotation();
Gson gson = builder.create();
如果我们不对Gson进行配置的话,该注解就不会生效,这样就会默认所有的字段都会被序列化和反序列化。
通过对Gson进行配置,只有带有Expose注解的字段才会被Gson进行序列化或者反序列化。
- 对Java Bean进行版本控制,这个使用的很少,比如
public class SoccerPlayer {
private String name;
//表明这个属性是1.2版本之后才加入的
@Since(1.2)
private int shirtNumber;
//表明这个属性在0.9版本上已经被移除了
@Until(0.9)
private String country;
private String teamName;
// Methods removed for brevity
}
和Expose一样,要使用这两个注解,也需要对Gson进行配置,如下
GsonBuilder builder = new GsonBuilder();
//在这里,我们定义版本是1.0,由于shirtNumber在1.2才加入,所以不生效
//country在0.9被移除,所以也不生效
builder.setVersion(1.0);
Gson gson = builder.create();
网友评论