1. 程式人生 > >Json-lib反序列化物件忽略屬性

Json-lib反序列化物件忽略屬性

      最近專案中使用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);