Десериализация / сериализация глубокой иерархии классов с помощью Gson / gson-extras - PullRequest
0 голосов
/ 02 июня 2019

Мне нужно десериализовать глубокую иерархию объектов, используя библиотеку Java Gson.

Я пытался использовать RuntimeTypeAdapterFactory из дополнений json, но, похоже, он не работает, как я ожидал, если зарегистрированные типы не являются прямыми потомками базового типа.

Вот пример, демонстрирующий мою иерархию:

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 действительно является интерфейсом). Но как мне достичь ожидаемой функциональности регистрации только конкретных типов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...