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编写自定义反序列化器的替代方法,或者这是我对特定的一个参数构造函数的唯一选择?
如果有其他选择,请告诉我。
由于
答案 0 :(得分:1)
一种替代方法是应用混合注释(请参阅此wiki或this blog post)以添加@JsonCreator以指定要使用此特定构造函数。 这要求'Context'来自JSON(JSON中的名称可以在构造函数参数上使用@JsonProperty指定);或者可以传入null(如果没有从JSON中找到这样的字段,则会发生这种情况)。 如果需要传递一个实际的外部上下文对象,那么就可以使用自定义反序列化器(直到实现“外部值注入”;这是有计划的但尚未添加)。