1

ActiveAndroid 有一个约束,即它的所有实体都需要从某个基类继承,并且需要有一个以 Context(来自活动)作为输入的单参数构造函数。[不喜欢这种约束]。

使用 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 实现一个自定义解串器。

是否有任何替代方法可以为杰克逊编写自定义反序列化器,或者这是我使用特定参数构造函数的唯一选择?

请让我知道是否有任何替代方案。

谢谢

4

1 回答 1

1

一种替代方法是应用混合注释(请参阅此wiki此博客文章)以添加 @JsonCreator 以指定要使用此特定构造函数。这要求“上下文”来自 JSON(JSON 中的名称可以在构造函数参数上使用 @JsonProperty 指定);或者可以传入 null (如果从 JSON 中找不到此类字段,则会发生这种情况)。如果需要传递实际的外部上下文对象,则可以使用自定义反序列化器(直到实现“外部值注入”;这是计划中的,但尚未添加)。

于 2011-06-06T22:08:08.927 回答