gson的使用
程序员文章站
2022-03-13 12:49:48
...
gson的使用
SerializedName的使用
当后台返回的json 和你定义的entity 的字段不一致,或者返回json命名不满意的使用可以用SerializedName的注解
定义我们的User 实体类
public class User {
//省略其它
public String name;
public int age;
public String emailAddress;
}
后台返回的json
{"name":"怪盗kidou","age":24,"email_address":"[email protected]"}
与我们期望的不一致,可以修改实体类如下
public class User {
//省略其它
public String name;
public int age;
@SerializedName("email_address")
public String emailAddress;
}
SerializedName 还提供了另外一个属性 alternate 接受String 数组
@SerializedName(value = "emailAddress", alternate = {"email", "email_address"})
public String emailAddress;
如果返回的json 中含有任意一个 emailAddress,email,email_address字段都会正确解析
序列化时候排除指定字段
当我们在entity转json 的时候需要排除指定字段有俩种常用方法
基于@Expose注解
使用方法:直接在字段上加@Expose 加上Expose注解会序列化,而不加的不会序列化
public class User {
public String name;
@Expose
public int age;
@Expose
public String emailAddress;
}
在使用Gson时也不能只是简单的new Gson()了。
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.create();
gson.toJson(user);
这样就会把User 中的name 字段排除在外了
基于策略(常用)
基于策略是利用Gson提供的ExclusionStrategy接口,同样需要使用GsonBuilder,相关API 2个,分别是addSerializationExclusionStrategy 和addDeserializationExclusionStrategy 分别针对序列化和反序化时。这里以序列化为例。
Gson gson = new GsonBuilder().addSerializationExclusionStrategy(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
//return true 排除字段
if ("name".equals(f.getName())) return true; //按字段名排除
return false;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
//return true 排除类
return false;
}
}).create();
同样可以排除name字段
上一篇: LintCode[中等]在数组中找到第 k 大的元素。
下一篇: 441. 排列硬币