Gson(动态)忽略字段@Export注解使用

背景:

提交(获取)服务器数据时,经常遇到json实体中某些字段不需要序列化(反序列化)提交(获取)到服务器(本地)。怎么办?Gson工具类实际已通过注解方式帮助我们实现了该需求,现进一步说明如下:

使用:

非动态忽略字段

1.使用注解:@Export
2.使用方法:new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
3.案例:
3.1.创建实体类

public class LoggedInUserDto {

    @Expose(serialize = false)
    private String userId;
    @Expose(deserialize = false)
    private String displayName;
    @Expose()
    private String displayCode;

    public LoggedInUserDto(String userId, String displayName, String displayCode) {
        this.userId = userId;
        this.displayName = displayName;
        this.displayCode = displayCode;
    }

    public String getUserId() {
        return userId;
    }

    public String getDisplayName() {
        return displayName;
    }

    public String getDisplayCode() {
        return displayCode;
    }

    @NonNull
    @Override
    public String toString() {
        return userId + "---" + displayName+ "---" + displayCode;
    }
}

3.2.使用GsonBuilder创建Gson实例

 Gson sGson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
//序列化:sGson.toJson(loggedInUserDto);  不会输出字段 userId
LoggedInUserDto loggedInUserDto = new LoggedInUserDto("8888","中控","supcon");
Log.d("------序列化---------",sGson.toJson(loggedInUserDto));

//反序列化:sGson.fromJson(gsonStr,LoggedInUserDto.class); 不会输出字段 displayName
String gsonStr = "{\"userId\": 8888 ,\"displayCode\":\"supcon\",\"displayName\":\"中控\"}";
Log.d("------反序列化---------",sGson.fromJson(gsonStr,LoggedInUserDto.class));

\color{red}{注:@Expose中默认serialize/deserialize均为true}

动态忽略字段(特别是继承父类中的字段)

Gson mGson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
            @Override
            public boolean shouldSkipField(FieldAttributes f) {
                // 忽略某些字段
                return f.getName().equals("field1") || f.getName().equals("field2");
            }

            @Override
            public boolean shouldSkipClass(Class<?> clazz) {
                // 忽略某个class
                return false;
            }
        }).create();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容