Json-lib反序列化物件忽略屬性
阿新 • • 發佈:2019-02-12
最近專案中使用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);