【问题标题】:Error: Class declares multiple JSON fields named serialVersionUid错误:类声明了多个名为 serialVersionUid 的 JSON 字段
【发布时间】:2017-12-11 22:17:00
【问题描述】:

我有 A 类,它扩展了 B 类,实现了可序列化。

当我尝试使用 GSON 库将其转换为 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;
}

【问题讨论】:

  • @RC。这个问题很相似,但这不是我的问题。我的问题是被声明为多个的字段不是我声明的,它是自动生成的。相关问题是关于我自己创建的字段。
  • 一个类不能extend Serializable。真正的代码是什么?

标签: java android json serialization gson


【解决方案1】:

已编辑:

我们已经更改了那里的代码,以便将 GSON 与自定义的 GsonBuilder 类一起使用。 代码看起来有点像这样:

...
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);

在这种情况下,我们在 json 化时忽略 serialVersionUIDCREATOR 字段。

旧:

几秒钟前我遇到了同样的问题。 我已经通过使用瞬态修饰符添加 serialVersionUUID 来解决它。通过超类,像这样:

private transient static final long serialVersionUID = 1L;

希望对你也有帮助。

【讨论】:

  • 很奇怪。 transientstatic 没有任何关联。真的必须是transient吗?
  • Java 中的transient 关键字用来表示一个字段不应该被序列化。来自 Java 语言规范,Java SE 7 版,第 8.3.1.3 节。瞬态字段:变量可以标记为瞬态,以表明它们不是对象持久状态的一部分。
猜你喜欢
  • 1970-01-01
  • 2019-08-23
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
相关资源
最近更新 更多