@SerializedName
主要应用在Gson解析json字符串时。Gson能直接将json字符串解析成java对象或者集合,也能将java对象转换为json字符串表示。例如有json数据如下:
{ "id":"1" "n":"zhangsan" "p":"123456" "s":"0" }
它能被解析到下面这个对象
public class User{ private String id; private String n; private String p; private string s; }
默认在字段名相同的字段间解析,所以User类必须要这样写才能直接使用Gson解析出来,但是java对象里的属性名和json里的字段名有时会不一样。Gson提供注解的方法来解决这个问题。
public class User{ private String id; @SerializedName("n") private String userName; @SerializedName("p") private String password; @SerializedName("s") private String sex; }
Expose
通常与@SerializedName连用,当我们不想把某个属性包含到json中时可以用。
public class UserSimple { @Expose() String name; // equals serialize & deserialize @Expose(serialize = false, deserialize = false) String email; @Expose(serialize = false) int age; @Expose(deserialize = false) boolean isDeveloper; // equals only serialize }
- 序列化的结果将只有name和isDeveloper出现在json中,因为serialize都是false。反序列化时,java对象将只会拥有json中的name和age,因为diserialze是true。