Android: Джексон с ActiveAndroid

1

ActiveAndroid имеет ограничение, что все его сущности должны наследовать от определенного базового класса и должны иметь один конструктор параметров, принимающий в Контексте (из активности) в качестве входного. [Не является поклонником этого ограничения].

С помощью gson я могу создать адаптер типа, чтобы обойти это ограничение.

public class PolicyInstanceCreator implements InstanceCreator<Policy>{
    private Context context;

    public PolicyInstanceCreator(Context context) {
        this.context = context;
    }

    @Override
    public Policy createInstance(Type type) {
        return new Policy(context);
    }
}

Gson gson = new GsonBuilder().registerTypeAdapter(Policy.class, new PolicyInstanceCreator(context)).create();
Policy[] policies = gson.fromJson(myString, Policy[].class);

Одна из возможностей заключается в том, что нам нужно реализовать пользовательский десеризатор с Jackson.

Есть ли альтернативы написанию пользовательского десериализатора для jackson или это единственный вариант с конкретным конструктором одного параметра?

Пожалуйста, дайте мне знать, если есть какая-либо альтернатива.

Спасибо

Теги:
jackson
gson
activeandroid

1 ответ

1

Один из вариантов заключается в применении mix- в аннотациях (см. wiki или это сообщение в блоге), чтобы добавить @JsonCreator, чтобы указать, что этот конкретный конструктор будет использоваться. Для этого требуется либо "Контекст" - это JSON (имя в JSON может быть указано с помощью @JsonProperty по параметру конструктора); или что это нормально передать в null (что происходит, если такое поле не найдено из JSON). Если необходимо передать фактический внешний контекстный объект, пользовательский десериализатор - это путь (до тех пор, пока не будет реализована "добавка внешнего значения", это планируется, но еще не добавлено).

  • 0
    Контекстом является сама деятельность. Я не очень знаком с Java, но, глядя на этот пост, я не уверен, что то, что хочет Active Android, может быть сделано. Мне действительно не нравится навязанное ActiveAndroi наследование, которое является корнем этой проблемы. Возможно, придется выключить ORM. Gson намного медленнее по сравнению с Джексоном, отсюда и выбор, иначе у Gson есть элегантное решение для обработки экземпляров.
  • 0
    Да, дизайн класса определенно неправильный, в старомодном и неправильном смысле. :-) ... что касается инстанцирования, возможно, Джексону действительно нужен способ регистрации инстанциаторов; это должно быть тривиально, если это необходимо.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню