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