1

我正在使用 Axis 调用基于 SOAP 的 Web 服务。然后,我尝试使用 Google Gson 库将返回的远程对象序列化为 JSON。

JSON 的序列化失败,Gson 抱怨“有多个名为 __equalsCalc() 的元素”。

当我在我的 IDE (Eclipse) 中检查返回的对象时,我可以看到这是真的——返回的对象有三个名为 __equalsCalc() 的成员和另外三个名为 __hashCode 的成员。

我环顾四周知道这些是由 WSDL2Java(我认为)添加的,以避免递归。我的问题是,为什么每个都有三个?我怎样才能让序列化程序忽略这些?它们实际上并不是对象定义的一部分(它被称为 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。
使用Jackson,您可以使用 @JsonIgnore 注释属性(即,根据 Java bean 约定具有 getter/setter 的字段)。
通过这种方式,您可以防止递归/没有匹配的 setter 或 getter 等问题...
尝试找出您在 GSon 是否有同样的问题或使用 Jackson。

于 2012-07-02T16:38:04.550 回答