Android:杰克逊与ActiveAndroid

时间:2011-06-06 19:30:26

标签: android json gson jackson activeandroid

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

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

一种可能性似乎是我们需要与杰克逊一起实施自定义desearlizer。

是否有必要为jackson编写自定义反序列化器的替代方法,或者这是我对特定的一个参数构造函数的唯一选择?

如果有其他选择,请告诉我。

由于

1 个答案:

答案 0 :(得分:1)

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