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-core在你的类路径中包含 jar,因为它依赖于它。

于 2012-08-07T09:06:39.183 回答
0

Sounds like either a bug in Gson or it is more particular/less robust. Without looking at the code for either it would be hard to know more.

Personally I use Jackson for JSON to POJO transformations.

Ultimately as long as the Structs2 plugin is available on your classpath I don't see why you couldn't leverage it's classes to handle JSON transformations. Ultimately JSON is a format therefore all JSON libraries need to produce commonly understandable data.

于 2012-08-07T03:36:15.510 回答
0

我有一个类似的问题,并通过将我对 SimpleDateFormat 的使用从类级别移到方法内部来解决它。GSON 不必以这种方式序列化 SimpleDateFormat。

希望这对某人有所帮助 - 45 分钟的头部撞击我!:-)

于 2014-11-06T08:42:52.230 回答