包含AtomicInteger的类的对象无法使用GSON转换为JSON

时间:2016-10-25 15:17:28

标签: java json gson atomicinteger

我正在尝试序列化一个Class of Class(比方说MyClass)

以下是MyClass.java的大致情况:

public class MyClass {

    private static final AtomicInteger variableOne = new AtomicInteger();
    private static final AtomicInteger variableTwo = new AtomicInteger();
    private static final AtomicInteger variableThree = new AtomicInteger();
    private static final AtomicInteger variableFour = new AtomicInteger();


    /*
    * Have the getters and setters here
    */
}

我正在尝试使用GSON将上述类的对象转换为JSON

以下是代码:

GsonBuilder gsonBuilder  = new GsonBuilder();
gsonBuilder.excludeFieldsWithModifiers(java.lang.reflect.Modifier.TRANSIENT);
Gson gson = gsonBuilder.create();
String jsonObject = gson.toJson(new MyClass());

但它引发了以下异常:

class java.util.concurrent.atomic.AtomicInteger declares multiple JSON fields named serialVersionUID

我不知道如何处理这个问题,因为S.O和其他论坛上的大多数答案都要求变量TRANSIENT,这基本上不是我想要实现的目标。

1 个答案:

答案 0 :(得分:0)

对于遇到这种问题的人,我找到了答案:

使用FieldExcluder注册您的GsonBuilder(我已将其命名为FieldExtractor)

GsonBuilder gsonBuilder = new GsonBuilder().setExclusionStrategies(new FieldExtractor()); 

FieldExcluder看起来像:

 private class FieldExtractor implements ExclusionStrategy {

            @Override
            public boolean shouldSkipClass(Class<?> arg0) {
                return false;
            }

            @Override
            public boolean shouldSkipField(FieldAttributes f) {

                if ("serialVersionUID".equals(f.getName())) {
                    return true;
                }

                return false;
            }

        }

基本上,您可以忽略以下格式提供异常的任何字段:

declares multiple JSON fields named serialVersionUID

您可以进一步修改if条件以进一步满足您的要求。