0

flexjsonライブラリを使用しようとしています。しかし、私のオブジェクトでは、使用する必要があります: com.google.api.client.util.DateTimeこれには、パラメーター コンストラクターがありません。私はいつもNoSuchMethodExceptionメッセージを受け取ります:Flexjson will instantiate any protected, private, or public no-arg constructor.ソースがあり、それを使って何かをしようとしています。コードは次のとおりです:

constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
return constructor.newInstance();

clazz.getDeclaredConstructor()空のコンストラクターがないため、例外がスローされています。それらの署名としましょう:

DateTime(long timestamp)?

このライブラリでこの種の問題に遭遇した人はいますか? たぶん、他のものを使用することを提案できます。によって生成されたオブジェクトをシリアル化するために使用していますGoogle Cloud Endpoints。多分私は別のアプローチでそれを行うことができますか?

4

1 に答える 1

1

これを行うために Flexjson のソース コードを変更する必要はありません。これを処理する方法は、ObjectFactory の独自の実装を作成し、それをバインド先の型に登録することです。そこから、必要に応じてインスタンス化できます。BeanObjectFactory をサブクラス化し、メソッド instantiate() をオーバーライドするのが最も簡単です。そこでは、必要なオブジェクトのインスタンスを作成するために何でもできます。BeanObjectFactory をサブクラス化することにより、そのオブジェクトのセッター/ゲッターを使用して、JSON からの個々のプロパティをオブジェクトにバインドします。オブジェクトがプロパティ メソッドをサポートしていない場合は、ObjectFactory を実装し、JSON からそのオブジェクトの値を手動で設定する方が簡単な場合があります。Flexjson の Web サイトには、ObjectFactory の構築に関する多くのドキュメントがあります。

次に、以下を使用して ObjectFactory をそのデータ型に登録できます。

 new JSONDeserializer<SomeObject>()
     .use( DateTime.class, new DateTimeObjectFactory() )
     .deserialize(json);
于 2013-03-12T21:39:01.733 に答える