欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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字段

引用: http://www.jianshu.com/p/e740196225a4

相关标签: gson