错误:类声明了多个名为serialVersionUid的JSON字段

时间:2017-07-07 14:49:46

标签: java android json serialization gson

我有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;
}

1 个答案:

答案 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;

我希望它对你有帮助。