@Override protected DATA convert(@NonNull JSONObject jsonObject) throws ConvertException { try { DATA data = null; if (mSingler != null) { String key = mSingler.primary(); Field field = mAnnotationMap.get(key); if (field == null) { throw new RuntimeException("Primary key must be existed and be annotated by Property."); } Object index = ReflectUtils.getValueFromField(jsonObject, key, field); data = SingleData.obtain(mDataClazz, index); if (data == null) { data = mDataClazz.newInstance(); SingleData.updateData(mDataClazz, index, data); } } if (data == null) { data = mDataClazz.newInstance(); } for (Map.Entry<String, Field> entry : mAnnotationMap.entrySet()) { Field field = entry.getValue(); String key = entry.getKey(); Object value = ReflectUtils.getValueFromField(jsonObject, key, field); if (value != null) { ReflectUtils.setValue(data, field, value); } } return data; } catch (InstantiationException e) { throw new ConvertException(e); } catch (IllegalAccessException e) { throw new ConvertException(e); } }