0

我正在尝试序列化一个类对象(比如说 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

我不确定如何处理这个问题,因为 SO 和其他论坛上的大多数答案都要求制作变量 TRANSIENT,而这基本上不是我想要实现的想法。

4

1 回答 1

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 条件以进一步满足您的要求。

于 2016-10-25T16:58:52.697 回答