码迷,mamicode.com
首页 > 其他好文 > 详细

Gson序列化时排除字段

时间:2021-06-21 20:59:25      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:serialize   efi   class   ota   def   build   serial   transient   tran   

1.正常序列化

new Gson().toJson(obj)

2.序列化null

Gson gson = new GsonBuilder().serializeNulls().create();
gson.toJson(obj)

3.忽略序列化某字段

  • 排除transient字段
字段加上transient修饰符
public transient int x; 
String json = new Gson().toJson(obj);
  • 排除Modifier为指定类型的字段
Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.PROTECTED).create();
String json = gson.toJson(obj);
  • 使用@Expose注解

没有被@Expose标注的字段会被排除
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
String json = gson.toJson(obj);
  • 使用ExclusionStrategy定制字段

    这种方式最灵活,下面的例子把所有划线开头的字段全部都排除掉:
    class MyObj {
        
        public int _x; // <---
        public int y;
        
        public MyObj(int x, int y) {
            this._x = x;
            this.y = y;
        }
        
    }
    @Test
    public void gson() {
        ExclusionStrategy myExclusionStrategy = new ExclusionStrategy() {
 
            @Override
            public boolean shouldSkipField(FieldAttributes fa) {
                return fa.getName().startsWith("_"); // <---
            }
 
            @Override
            public boolean shouldSkipClass(Class<?> clazz) {
                return false;
            }
            
        };
        
        Gson gson = new GsonBuilder()
                .setExclusionStrategies(myExclusionStrategy) // <---
                .create();
        
        MyObj obj = new MyObj(1, 2);
        String json = gson.toJson(obj);
        Assert.assertEquals("{\"y\":2}", json);
    }

Gson序列化时排除字段

标签:serialize   efi   class   ota   def   build   serial   transient   tran   

原文地址:https://www.cnblogs.com/format-ch/p/14914029.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!