一般我们在服务端中使用struts-json-plugin编码,在客户端使用net.sf.json-lib解码,
虽然这两个组件都是用的是json协议,但是在转换的时候,会遇到一些问题,比如说列表类型,还有下面要说到的日期类型。
struts-json-plugin编码日期类型一般编码为"yyyy-MM-dd'T'HH:mmss"(例如2012-10-09T17:28:32),而
net.sf.json-lib
一般编码成毫秒的长整型表示,因此要使两方能够协作编解码的话,要么改变struts-json-plugin的格式(不可行,因为文档上说得明白,只能使用SimpleDateFormatter的格式),要么改变json-lib的格式,只需要在解码json字符串前加上一句即可:
JSONUtils.getMorpherRegistry().registerMorpher(newDateMorpher(new String[] {"yyyy-MM-dd't'HH:mm:ss"}),false);
SomeCls obj =(
SomeCls
)JSONObject.toBean(JSONObject.fromObject(someStr),
SomeCls
.class);
另外,对于列表类型,需要注册类型:
Map classMap = new HashMap();
classMap.put("SomeCls2", SomeCls2.class);
SomeCls obj =(
SomeCls
)JSONObject.toBean(JSONObject.fromObject(someStr),
SomeCls
.class,classMap);