使用Gson / gson-extras反序列化/序列化深度类层次结构

时间:2019-06-02 12:21:03

标签: java json inheritance gson deserialization

我需要使用Gson Java库反序列化对象的深层次结构。

我尝试过使用json extras中的RuntimeTypeAdapterFactory,但是它似乎无法正常工作,因为我希望注册类型不是基本类型的直接后代。

以下是展示我的等级结构的示例:

interface Base {
}

interface NormalChild extends Base {
}

class SpecialChild implements Base {
}

class Child1 implements NormalChild {
}
class Child2 implements NormalChild {
}
// etc...

这是反序列化器:

class Deserializer {
    private Gson GSON = new GsonBuilder().registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(Base.class, "type")
                    .registerSubtype(SpecialChild.class)
                    .registerSubtype(Child1.class)
                    .registerSubtype(Child2.class)
                    // etc...
            )
            .create();

    public Base deserialize(JsonElement json) {
        return GSON.fromJson(json, Base.class);
    }
}

我收到与“ NormalChild”的构造函数有关的错误消息,该消息无法调用(因为NormalChild确实是一个接口)。但是我将如何实现仅注册具体类型的预期功能?

0 个答案:

没有答案