jerry_sjtu
jerry_sjtu

Reputation: 5456

Serialize an object to json in Java?

I am trying to serialize an instance of Campaign in Adwords API with gson at first with the code below:

Campaign c = new Campaign(); 
c.setName("beijing");
c.setId(23423L);
Gson gson = new Gson();
String json = gson.toJson(c);

and I get the exception that class Money declares multiple JSON fields named __equalsCalc. When I try to serialize the instance with json plugin of struts2 with the code below

String str = org.apache.struts2.json.JSONUtil.serialize(c);
System.out.println(str);

It works and output the correct result

{"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}

Then my question is that why can the json plugin of struts2 can serialize the instance correctly while gson cannot? Can I use the json plugin of struts2 to serialize objects to json since it is design to produce json result in struts2 not for this situation.

Upvotes: 1

Views: 6772

Answers (3)

Geek Stocks
Geek Stocks

Reputation: 2030

I had a similar problem and solved it by moving my use of SimpleDateFormat from the class level to inside a method. GSON doesn't have to serialize SimpleDateFormat this way.

Hope this helps someone - 45 minutes of head banging for me! :-)

Upvotes: 0

Uchenna Nwanyanwu
Uchenna Nwanyanwu

Reputation: 3204

You can use the json plugin in struts2 to serialize your object manually to json string. You can do that by calling the serialize static method.

String jsonString = JSONUtil.serialize(your_object);

Don't forget to include xwork-core jar in your classpath because it depends on it.

Upvotes: 1

Syntax
Syntax

Reputation: 2197

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.

Upvotes: 0

Related Questions