Android: Джексон с ActiveAndroid - PullRequest
1 голос
/ 06 июня 2011

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);

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

Существуют ли альтернативы написанию собственного десериализатора для Джексона или это единственный вариант с конкретным конструктором с одним параметром?

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

Спасибо

1 Ответ

1 голос
/ 07 июня 2011

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

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