我正在尝试序列化一个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,这基本上不是我想要实现的目标。
答案 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条件以进一步满足您的要求。