我尝试使用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结果而不是这种情况。
答案 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分钟的头撞我! : - )