1

ActiveAndroid には、すべてのエンティティが特定の基本クラスから継承する必要があり、(アクティビティから) Context を入力として受け取る 1 つのパラメーター コンストラクターが必要であるという制約があります。[この制約のファンではありません]。

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 つの可能性は、Jackson でカスタムのデシアライザーを実装する必要があるようです。

ジャクソン用のカスタムデシリアライザーを作成する必要があることに代わるものはありますか、それとも特定の 1 つのパラメーターコンストラクターを持つ唯一のオプションですか?

代替品があれば教えてください。

ありがとう

4

1 に答える 1

1

1つの代替方法は、ミックスインアノテーション(このwikiまたはこのブログ投稿を参照)を適用して@JsonCreatorを追加し、この特定のコンストラクターを使用することを指定することです。これには、「コンテキスト」がJSONからのものである必要があります(JSONの名前はコンストラクターパラメーターの@JsonPropertyで指定できます)。または、nullを渡しても問題ありません(JSONからそのようなフィールドが見つからない場合に発生します)。実際の外部コンテキストオブジェクトを渡す必要がある場合は、カスタムデシリアライザーが最適です(「外部値の挿入」が実装されるまで。これは計画されていますが、まだ追加されていません)。

于 2011-06-06T22:08:08.927 に答える