我的项目中有一些模型类,例如Customer,Product等等,它们具有多个字段及其setter-getter方法,我需要 通过套接字 与客户端和服务器之间 来回交换这些类的对象作为JSONObject 。
Customer
Product
有什么方法可以JSONObject直接从模型类的对象创建,以使对象的字段成为键,而该模型类对象的值成为此JSONObject的值。
JSONObject
例:
Customer c = new Customer(); c.setName("Foo Bar"); c.setCity("Atlantis"); ..... /* More such setters and corresponding getters when I need the values */ .....
我创建JSON对象为:
JSONObject jsonc = new JSONObject(c); //I'll use this only once I'm done setting all values.
这让我有点像:
{"name":"Foo Bar","city":"Atlantis"...}
请注意,在我的某些模型类中,某些属性本身 是其他模型类的对象 。如:
Product p = new Product(); p.setName("FooBar Cookies"); p.setProductType("Food"); c.setBoughtProduct(p);
如我所料,在上述情况下,产生的JSON对象为:
{"name":"Foo Bar","city":"Atlantis","bought":{"productname":"FooBar Cookies","producttype":"food"}}
我知道我可以toJSONString()在每个模型类中创建类似的东西,然后创建并处理JSON友好的字符串,但是根据我以前在Java中创建RESTful服务的经验(此问题完全不在上下文中),我可以返回通过使用来自服务方法的JSON字符串,并使@Produces(MediaType.APPLICATION_JSON)方法返回模型类的对象。因此它产生了JSON字符串,我可以在客户端使用它。
toJSONString()
@Produces(MediaType.APPLICATION_JSON)
我想知道在当前情况下是否有可能获得类似的行为。
Google GSON做到了;我已经在多个项目中使用了它,它很简单并且运行良好。它可以在不干预的情况下完成简单对象的翻译,但是也有一种自定义翻译的机制(双向)。
Gson g = ...; String jsonString = g.toJson(new Customer());