Java中的Gson:尝试反序列化Java.lang.Class。忘记注册类型适配器
我试图解析一个JSON字符串,如下所示: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
{
"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是泛型类,它可以是多种类型的类,我更改了我的问题谢谢你帮助我:)