2017-09-08 41 views
1

我有这个类:反序列化泛型类的GSON在Android的

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

我用:编译 'com.google.code.gson:GSON:2.4' 在gradle这个

回答

1

我发现了解决方案:

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(); 
0

只需使用

DbReturned<Credits> data = gson.fromJson(result, new DbReturned<Credits>(){}.getType()); 

申报,全程数据类型GSON。