#android #json #gson
#Android #json #gson
Вопрос:
Я хотел создать некоторые абстракции, поэтому я бы уменьшил количество дублируемого кода.
Простой пример (мои реальные объекты намного сложнее — вот почему я разбираю их вручную, но и B, и C совместно используют много данных с A):
public abstract class A {
int x;
int y;
}
public class B extends A {
int z;
}
public class C extends A {
int w;
}
Я написал два пользовательских десериализатора, и оба они являются производными от некоторого абстрактного десериализатора, который позаботится о заполнении полей x
и y
базового класса, а затем он должен заполнять поля в зависимости от определенного класса.
gsonBuilder.registerTypeAdapter(B.class, new BsonDeserializer());
gsonBuilder.registerTypeAdapter(C.class, new CJsonDeserializer());
Моя проблема в том, что Gson будет учитывать только суперкласс при регистрации, поэтому он не будет использовать два разных десериализатора для двух разных классов, только первый.
Я знаю о том, что доступен класс RuntimeTypeAdapter, но AFAIK, это заставило бы меня изменить json на моем сервере — скажем, каждый JSON будет содержать поле «тип» (и я действительно не могу этого сделать — мне не разрешено) (?)
Существуют ли какие-либо хорошие подходы к решению такого рода проблем?