android - 在 Android 的 GSON 中反序列化泛型类

标签 android gson

我有这门课:

public class DbReturned<T> {
   public boolean State;
   public int UserID;
   public String Error;
   public T row;
   public List<T> Data;
   public boolean Hr;
   public boolean Credits;
}

信用等级是:

public class Credits {
  public int id;
  public int year;
  public int month;
  public double t1;
  public double t2;
  public double t3;
}

JSON 是

result = {"State":true,"UserID":0,"Error":null,"Data":[{"id":1,"year":2017,"month":1,"t1":77,"t2":88,"t3":99,"CreateBy":1,"CreateDate":"2017-08-22T13:58:27.497","ModifyBy":1,"ModifyDate":"2017-08-22T13:58:27.497"}],"row":null,"Credits":false,"Hr":false}

如何反序列化为 DbReturned: 此代码无效:

Gson gson = new GsonBuilder().create();
            if(result != null) {
                DbReturned<Credits> data = gson.fromJson(result, DbReturned.class);
            }

我用过:在 gradle 中编译 'com.google.code.gson:gson:2.4'

最佳答案

我找到了解决方案:

 public <T> DbReturned<T> getResponse(final Class<T> dataClass ,
                                         final String rawResponse) 
    {
        return gson.fromJson(rawResponse, 
                             getType(DbReturned.class, 
                             dataClass));
    }



private Type getType(final Class<?> rawClass, 
                       final Class<?> 
                       parameterClass) 
   {
        return new ParameterizedType() {
            @Override
            public Type[] getActualTypeArguments() {
                return new Type[]{parameterClass};
            }

            @Override
            public Type getRawType() {
                return rawClass;
            }

            @Override
            public Type getOwnerType() {
                return null;
            }

        };
    }

我称它为:

DbReturned<Credits> data = getResponse(Credits.class , 
                                       result.toString());

并且 Gson 变量在类的顶部是最终的:

public  final  Gson gson = new Gson();

关于android - 在 Android 的 GSON 中反序列化泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46123762/

相关文章:

android - imageview 中的进度对话框,直到我从服务器加载图像

android - dagger 简单示例给出了 IllegalStateException

java - 有没有可以序列化Proxy对象的JSON库?

java - 如何使用正则表达式来识别JSON字符串中的错误消息?

java - 从嵌套 JSON 中提取所有值

android - 在 Android 中获取 UARFCN 和 SC

Android Studio 1.3 布局预览蓝图

android - 多久运行一次 getWritableDatabase() 和 getReadableDatabase()?

java - GSON 在运行 toJSON 时导致 StackOverFlow 错误

java - 如何从点的 ArrayList 中获取 GeoPoint?