最近项目中使用json-lib对json字符串进行序列化及反序列化,在开发的时候,经常会用到一个方法,JsonObject.toBean(jsonObject, Object.class),该方法会很容易地将Json字符串转换为Java实体类,前提条件是,json字符串的key值与Java实体类的属性必须一致,如果Java实体类中的属性多余json字符串中的key值时就会报net.sf.json.JSONException: java.lang.NoSuchMethodException: Unknown property on class 异常,为了解决这个问题,需要对属性进行封装,忽略掉Java实体类中没有的属性,代码如下:
public class PropertyStrategyWrapper extends PropertySetStrategy {
private PropertySetStrategy original;
public PropertyStrategyWrapper(PropertySetStrategy original) {
this.original = original;
}
@Override
public void setProperty(Object o, String string, Object o1) throws JSONException {
try {
original.setProperty(o, string, o1);
} catch (Exception ex) {
//ignore
}
}
}
在使用的地方,需要定义JsonConfig对象,代码如下:
// 声明JsonConfig对象
JsonConfig cfg = new JsonConfig();
// 设置属性包装器
cfg.setPropertySetStrategy(new PropertyStrategyWrapper(PropertySetStrategy.DEFAULT));
// 设置要转换成的JavaBean
cfg.setRootClass(MkChrmosMember.class);
// 转换
mkChrmosMember = (MkChrmosMember)JSONObject.toBean(obj.getJSONObject("member"), cfg);