@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);
   }
 }