1

Axis を使用して SOAP ベースの Web サービスを呼び出しています。次に、Google Gson ライブラリを使用して、返されたリモート オブジェクトを JSON としてシリアル化しようとしています。

JSON へのシリアル化は失敗し、Gson は「__equalsCalc() という名前の要素が複数ある」と不平を言っています。

IDE (Eclipse) で返されたオブジェクトを調べると、これが正しいことがわかります。返されたオブジェクトには、__equalsCalc() という名前の 3 つのメンバーと、__hashCode という名前の別の 3 つのメンバーがあります。

再帰を避けるために、これらが WSDL2Java によって追加されていることを知っています (私はそう思います)。私の質問は、なぜそれぞれが 3 つあるのですか? また、シリアライザーにこれらを無視させるにはどうすればよいですか? これらは、実際にはオブジェクトの定義の一部ではありません (参照用に RemoteProject と呼ばれます)。RemoteProject を RemoteProject にキャストして、それらのメンバーをドロップさせるようなハックなことはできますか?

4

2 に答える 2

1

これを解決するのはそれほど難しくありません。シリアル化されているクラスがスーパークラスから同じ名前のフィールドをシャドウイングしているため、同じインスタンス var の複数のコピーがあります。私はこれらのフィールドを気にしないので、Gson での最善のアプローチは、名前に基づいてフィールドを選択的に無視できるカスタム ExckusionStrategy を作成することです。

http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/ExclusionStrategy.html

于 2012-07-03T01:26:48.670 に答える
0

私はGSONを知りません。ジャクソン
を 使用すると、@jsonignoreでプロパティ(つまり、Java Beanコンベンションに従ってゲッター/セッターを持つフィールド)に注釈を付けることができます。 このようにして、再帰/一致するセッターやゲッターなしなどの問題を防ぐことができます... GSONまたはJacksonを使用しているかどうかを調べてみてください。

于 2012-07-02T16:38:04.550 に答える