在Java中将对象序列化为json?

时间:2012-08-07 03:12:54

标签: java json struts2 gson

我尝试使用gson首先使用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结果而不是这种情况。

3 个答案:

答案 0 :(得分:1)

您可以使用struts2中的json插件手动将对象序列化为json字符串。您可以通过调用serialize静态方法来完成此操作。

String jsonString = JSONUtil.serialize(your_object);

不要忘记在类路径中包含xwork-core jar,因为它取决于它。

答案 1 :(得分:0)

听起来像是Gson中的一个错误,或者它更特别/不那么健壮。如果不查看代码,就很难知道更多。

我个人使用Jackson进行JSON到POJO的转换。

最终,只要您的类路径上有Structs2插件,我就不明白为什么你不能利用它的类来处理JSON转换。最终JSON是一种格式,因此所有JSON库都需要生成通常可理解的数据。

答案 2 :(得分:0)

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

希望这有助于某人 - 45分钟的头撞我! : - )