gson跳过类

kq4fsx7k  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(271)

我正在为我的discord机器人写一个权限系统。我面临的问题是json中充满了“空”对象。
我想跳过这样的物体

"userId": {
          "userName": "RandomDiscord Name",
          "permissions": []
        },

但要保留这样的东西

"userId": {
          "userName": "RandomDiscord Name",
          "permissions": [
                "some.permission.string",
                "some.permission.string2",
                "some.permission.string3",
          ]
        },

我试着找一个 ExclusionStrategy => shouldSkipClass(Class<?> aClass) 在那里我可以查到那堂课的内容。喜欢

@Override
public boolean shouldSkipClass(Class<?> aClass) {
    if(aClass instanceof PermissionUser){
        PermissionUser user = (PermissionUser) aClass;
        return user.getPermissions().isEmpty();
    }
    return false;
}

但这不起作用,因为我不会得到示例,只是类的类型,所以我不能强制转换它。
有人能给我指出正确的方向吗(对我好一点,白天的医护人员,编程只是一种爱好)

kkbh8khc

kkbh8khc1#

好吧,我找到办法了。

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation()
                .registerTypeAdapter(PermissionUser.class, new PermissionUserAdapter())
                .registerTypeAdapter(PermissionGroup.class, new PermissionGroupAdapter())
                .setPrettyPrinting().create();

适配器如下所示。

public class PermissionUserAdapter implements JsonSerializer<PermissionUser> {
    @Override
    public JsonElement serialize(PermissionUser src, Type typeOfSrc, JsonSerializationContext context) {
        if(!src.getPermissions().isEmpty() && src.getPermissions() != null){
            Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create();
            return gson.toJsonTree(src);
        }
        return null;
    }
}

只要我找到了正确的方向就很简单了。如果有人有更好的主意,请随时纠正我。

相关问题