当我将ArrayList<Student>
转换为json对象时,它会按如下方式给出json。
[{"firstName":"Namal","lastName":"Fernando"},{"firstName":"Lakmini","lastName":"Fernando"}]
但是我无法再从我得到的json字符串创建ArrayList<Student>
。我该怎么做。问题是在fromJson方法中提供泛型类的类。
我尝试了以下方法,但是发誓。
List<Student> studentsUpdated = gson.fromJson(json, new ArrayList<Student>().getClass());
List<Student> studentsUpdated = gson.fromJson(json, new ArrayList<Student>().getClass().getGenericSuperclass());
Json读/写方法。
private void jsonUtil(){
List<Student> students = new ArrayList<Student>();
Student student1 = new Student();
student1.setFirstName("Namal");
student1.setLastName("Fernando");
students.add(student1);
Student student2 = new Student();
student2.setFirstName("Lakmini");
student2.setLastName("Fernando");
students.add(student2);
Gson gson = new Gson();
String json = gson.toJson(students);
System.out.println("jsonUtil().json : " + json);
List<Student> studentsUpdated = gson.fromJson(json, ArrayList<Student>.class); // This is the place that the error occured
}
学生班:
class Student{
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
String firstName = "-";
String lastName = "-";
}
答案 0 :(得分:1)
使用以下代码:
Type type = new TypeToken<ArrayList<Student>>(){}.getType();
List<Student> studentsUpdated = gson.fromJson(json, type);
而不是
List<Student> studentsUpdated = gson.fromJson(json, ArrayList<Student>.class);
答案 1 :(得分:1)
您可以使用 TypeToken 将json字符串加载到自定义对象中。
试试这段代码。
List<Student> studentsUpdated = gson.fromJson(json, new TypeToken<List<Student>>(){}.getType());
答案 2 :(得分:1)
这是我从谷歌文档中找到的
如果您正在序列化/反序列化的对象是 ParameterizedType(即包含至少一个类型参数并且可以 是一个数组)然后你必须使用toJson(对象,类型)或 fromJson(String,Type)方法。这是一个序列化和示例 deserialing参数化类型:
Type listType = new TypeToken<List<String>>() {}.getType();
List<String> target = new LinkedList<String>(); target.add("blah");
Gson gson = new Gson();
String json = gson.toJson(target, listType);
List<String> target2 = gson.fromJson(json, listType);
您可以尝试使用TypeToken