java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap无法转换为pojo.class [英] java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to pojo.class
问题描述
获取java.lang.ClassCastException:序列化通用类型时,无法将com.google.gson.internal.LinkedTreeMap强制转换为pojo.class.请协助.
Getting java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to pojo.class while serializing Generic type.Kindly assist.
这是为Json fileReader类编写的代码.
This is the code written for Json fileReader class.
public class ReadJsonFile<T> {
private static final Object ReadJsonFile = null;
public static void main (String[] args)
{
ReadJsonFile read = new ReadJsonFile();
read.getjsondata("src/test/resource/testdataresource/addplacerequest.json", Addbook.class);
}
public List<T> getjsondata(String filepath, Class<T> typeofT)
{
//filepath= "src/test/resource/testdataresource/addplacerequest.json";
Gson gson = new Gson(); ;
BufferedReader bufferReader = null;
try {
bufferReader = new BufferedReader(new FileReader(filepath));
*/
Type ListType = new TypeToken<ArrayList<T>>(){}.getType();
//gson.toJson(ReadJsonFile,ListType);
List<T> arraylist = gson.fromJson(bufferReader, ListType);
Iterator iter = arraylist.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
return(arraylist);
}catch(FileNotFoundException e) {
throw new RuntimeException("Json file not found at path : " + filepath);
}finally {
try { if(bufferReader != null) bufferReader.close();}
catch (IOException ignore) {}
}
}
}
我使用的POJO类是:
POJO class that I have used is:
public class Addbook {
public String name;
public String isbn;
public String aisle;
public String author;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getAisle() {
return aisle;
}
public void setAisle(String aisle) {
this.aisle = aisle;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Addbook [name="+ name + ",isbn="+ isbn +",aisle="+ aisle +",authur="+ author +"]";
}
}
文件和Pojo阅读器类
File and Pojo reader class
public class TestDataBuild {
private static String isbn;
public static List<Addbook> addbook()
{
ReadJsonFile readJson=new ReadJsonFile();
List<Addbook> addbook = readJson.getjsondata("src/test/resource/testdataresource/addplacerequest.json", Addbook.class);
//System.out.println(addbook.getClass().getName()); // variable class name
addbook.get(0).setName("name");
addbook.get(1).setAuthor("author");//listOfClients.get(clientIndex).setFirstName(newFirstName);
addbook.get(2).setIsbn(isbn);
addbook.get(3).setAisle("aisle");
return addbook;
}
}
使用的Json文件:
[
{
"name": "The GoodDay",
"isbn": 67086,
"aisle": "GoodDay",
"author": "fghwsdf"
},
{
"name": "The BadDay",
"isbn": 56897,
"aisle": "BadDay",
"author": "dhdjfjj"
}
]
我应该如何解决此错误?
How should I resolve this error?
推荐答案
代替
Type ListType = new TypeToken<ArrayList<T>>(){}.getType();
使用
Type ListType =TypeToken.getParameterized(ArrayList.class, typeofT).getType();
自Gson 2.8.0起提供支持
Support since Gson 2.8.0
这个问题已经被问到并回答了 具有动态ArrayList项类型的Gson TypeToken
This question has been asked and answered Gson TypeToken with dynamic ArrayList item type
这篇关于java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap无法转换为pojo.class的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!