Java中的Gson:尝试反序列化Java.lang.Class。忘记注册类型适配器

Java中的Gson:尝试反序列化Java.lang.Class。忘记注册类型适配器,java,android,Java,Android,我试图解析一个JSON字符串,如下所示: { "Message":"OK", "Obj": { "IdCatrgorie":"1", "Name":"catg1", "IdUser":"2" }, "Statue":"OK" } 响应类(Android): public class Response<T> { public String Message; public Class<T> Obj; publi

我试图解析一个JSON字符串,如下所示:

{
"Message":"OK",

"Obj":
  {
    "IdCatrgorie":"1",
    "Name":"catg1",
    "IdUser":"2"
  },

"Statue":"OK"
}
响应类(Android):

public class Response<T> {

    public String Message;
    public Class<T>  Obj;
    public String Statue;

public Response() {

    }
}
主类:

public class Categorie {



        public int IdCatrgorie;
        public int IdUser;
        public String Name;

        public Categorie(){}
}
private static String readUrl(String urlString) throws Exception {
    BufferedReader reader = null;
    try {
        URL url = new URL(urlString);
        reader = new BufferedReader(new InputStreamReader(url.openStream()));
        StringBuffer buffer = new StringBuffer();
        int read;
        char[] chars = new char[1024];
        while ((read = reader.read(chars)) != -1)
            buffer.append(chars, 0, read); 

        return buffer.toString();
    } finally {
        if (reader != null)
            reader.close();
    }
}


public static void Main(.....)
{
      String json;
        try {
            json = readUrl("http://192.168.56.1:91/truescan/");

            GsonBuilder gsonBuilder = new GsonBuilder();

            Gson gson = gsonBuilder.create();

            Response<Categorie> posts = gson.fromJson(json, Response.class);
            Toast.makeText(MainActivity.this, String.valueOf(response.Message), Toast.LENGTH_LONG).show();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            Toast.makeText(MainActivity.this, String.valueOf("exception"+e.getMessage()), Toast.LENGTH_LONG).show();
        }


}
当我从响应类中删除“Obj”属性时,这是可行的,但没有得到Obj数据

你知道我该怎么修吗


谢谢

您的
Response
类需要
Obj
值的字符串;但是,JSON中有一个对象。要解决此冲突,可以创建一个新类来包含
Obj
对象,如下所示:

public class Response {
    @SerializedName("Message")
    public String Message;

    @SerializedName("Obj")
    public Obj obj;

    @SerializedName("Statue")
    public String Statue;

}

public class Obj {
    @SerializedName("IdCatrgorie")
    int IdCatrgorie;

    @SerializedName("Name")
    String Name;

    @SerializedName("IdUser")
    int IdUser;
}
或者另一种方法可能是将
Obj
的所有内容放在字符串列表中:

public class Response {
    @SerializedName("Message")
    public String Message;

    @SerializedName("Obj")
    public Obj obj;

    @SerializedName("Statue")
    public String Statue;

}
编辑:

public class Response<T> {

    public String Message;
    public Class<T>  Obj;
    public String Statue;

public Response() {

    }
}
为了在GSON中使用泛型类,您应该使用
TypeToken

Type responseType = new TypeToken<Response<String>>() {}.getType();
Response<String> response = new Gson().fromJson(jsonString, responseType);
Type responseType=new-TypeToken(){}.getType();
Response-Response=new Gson().fromJson(jsonString,responseType);

我犯了一个错误

解决方案

public class Response<T> {

    public String Message;
    public T  Obj;
    public String Statue;

public Response() {

    }
}
公共类响应{
公共字符串消息;
公共交通工具;
公众弦像;
公众回应({
}
}
在主要课堂上:

json = readUrl("http://192.168.56.1:91/truescan/");

            GsonBuilder gsonBuilder = new GsonBuilder();

            Gson gson = gsonBuilder.create();

            Type responseType = new TypeToken<Response<Categorie>>() {}.getType();
            Response<Categorie> posts = gson.fromJson(json, responseType);
            Categorie catg = (Categorie)posts.Obj;

            Toast.makeText(MainActivity.this, String.valueOf(catg.Name), Toast.LENGTH_LONG).show();
json=readUrl(“http://192.168.56.1:91/truescan/");
GsonBuilder GsonBuilder=新的GsonBuilder();
Gson-Gson=gsonBuilder.create();
类型responseType=newTypeToken(){}.getType();
Response posts=gson.fromJson(json,responseType);
Categorie catg=(Categorie)posts.Obj;
Toast.makeText(MainActivity.this,String.valueOf(catg.Name),Toast.LENGTH_LONG.show();

根据
响应
类,
Obj
需要是
字符串
;但是,在json中,它看起来像一个数组。Obj属性必须是泛型类吗?谢谢@qamyoncu但Obj是泛型类,它可以是多种类型的类,我更改了我的问题谢谢你帮助我:)