我有A类,它扩展了B类,实现了Serializable。
当我尝试使用GSON lib在JSON中对其进行转换时,它表示"类声明了多个名为serialVersionUid"的JSON字段。
只要我知道,如果我没有明确声明serialVersionUid,它就是由GSON生成的。
我也试过静态地放置serialVersionUid,但是没有用。
我可以通过在A类中实现序列化来修复错误,但我有很多扩展B的类,我不认为从中排除B将是一个很好的意识形态...
有谁知道为什么会出现这种错误?
Class A extends B {
private c;
private d;
private e;
}
Class B extends Serializable{
private f;
private g;
}
答案 0 :(得分:2)
编辑:
我们已经将代码更改为使用带有自定义GsonBuilder类的GSON。 代码看起来有点像:
...
private static final List<String> EXCLUDE = new ArrayList<String>() {{
add("serialVersionUID");
add("CREATOR");
}};
....
Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.TRANSIENT)
.setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
boolean exclude = false;
try {
exclude = EXCLUDE.contains(f.getName());
} catch (Exception ignore) {
}
return exclude;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
})
.create();
return gson.toJson(object);
在这种情况下,我们在jsonizing时忽略 serialVersionUID 和 CREATOR 字段。
OLD:
几秒钟前我遇到了同样的问题。 我通过使用transient修饰符添加serialVersionUUID来解决它。超类,如:
private transient static final long serialVersionUID = 1L;
我希望它对你有帮助。