0

以下のコードを使用して、最初に gson を使用して Adwords API で Campaign のインスタンスをシリアル化しようとしています。

Campaign c = new Campaign(); 
c.setName("beijing");
c.setId(23423L);
Gson gson = new Gson();
String json = gson.toJson(c);

クラス Money が __equalsCalc という名前の複数の JSON フィールドを宣言しているという例外が発生します。以下のコードでstruts2のjsonプラグインでインスタンスをシリアライズしようとすると

String str = org.apache.struts2.json.JSONUtil.serialize(c);
System.out.println(str);

それは機能し、正しい結果を出力します

{"adServingOptimizationStatus":null,"biddingStrategy":null,"budget":null,"campaignStats":null,"conversionOptimizerEligibility":null,"endDate":null,"frequencyCap":null,"id":23423,"name":"beijing","networkSetting":null,"servingStatus":null,"settings":null,"startDate":null,"status":null}

次に、私の質問は、struts2 の json プラグインがインスタンスを正しくシリアル化できるのに、gson ができないのはなぜですか? struts2 の json プラグインを使用してオブジェクトを json にシリアル化できますか? これは、この状況ではなく struts2 で json の結果を生成するように設計されているためです。

4

3 に答える 3

1

jsonstruts2のプラグインを使用して、オブジェクトを手動でjson文字列にシリアル化できます。serializeこれを行うには、静的メソッドを呼び出します。

String jsonString = JSONUtil.serialize(your_object);

xwork-corejar に依存しているため、クラスパスに jarを含めることを忘れないでください。

于 2012-08-07T09:06:39.183 に答える
0

Gsonのバグのように聞こえるか、より具体的/堅牢性が低いようです。いずれかのコードを見ないと、詳細を知るのは難しいでしょう。

個人的には、JSON から POJO への変換にJacksonを使用しています。

最終的に、Structs2 プラグインがクラスパスで利用可能である限り、そのクラスを活用して JSON 変換を処理できない理由がわかりません。最終的に JSON はフォーマットであるため、すべての JSON ライブラリは共通に理解できるデータを生成する必要があります。

于 2012-08-07T03:36:15.510 に答える
0

同様の問題があり、SimpleDateFormat の使用をクラス レベルからメソッド内に移動することで解決しました。GSON は、このように SimpleDateFormat をシリアル化する必要はありません。

これが誰かの役に立てば幸いです-45分間のヘッドバンギング!:-)

于 2014-11-06T08:42:52.230 に答える