[英]GSON - Convert Object that has a Generic List in to JSON String
当我运行以下命令时,我看到一个空响应“{}”。 Employee 类有一个我认为是导致问题的列表。 请你让我知道我如何克服这个问题?
public class ServiceValidationTest {
private Gson gson;
public ServiceValidationTest() {
this.setGson(new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.registerTypeHierarchyAdapter(byte[].class,
new GsonByteArrayHandler())
.registerTypeHierarchyAdapter(boolean.class,
new GsonBooleanHandler())
.registerTypeHierarchyAdapter(Date.class,
new GsonDateHandler())
.create());
}
public static void main(String[] args) throws Exception{
List<Grade> grades = new ArrayList<Grade>();
grades.add(new Grade("1"));
grades.add(new Grade("2"));
grades.add(new Grade("3"));
grades.add(new Grade("4"));
Employee employee = new Employee();
employee.setGrades(grades);
employee.setName("someone");
System.out.println(new ServiceValidationTest().getGson().toJson(employee));
}
public Gson getGson() {
return gson;
}
public void setGson(Gson gson) {
this.gson = gson;
}
}
员工班
package com.test;
import java.util.List;
public class Employee {
private String name;
private List<Grade> grades;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Grade> getGrades() {
return grades;
}
public void setGrades(List<Grade> grades) {
this.grades = grades;
}
}
年级
package com.test;
public class Grade {
public Grade(String grade) {
super();
this.grade = grade;
}
private String grade;
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
}
编辑
我发现下面的代码导致了这个问题。 如果声明 new gson() 并使用 gson 对象,则它按预期工作 -
this.setGson(new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.registerTypeHierarchyAdapter(byte[].class,
new GsonByteArrayHandler())
.registerTypeHierarchyAdapter(boolean.class,
new GsonBooleanHandler())
.registerTypeHierarchyAdapter(Date.class,
new GsonDateHandler())
.create());
该问题是由 excludeFieldsWithoutExposeAnnotation() 引起的,它排除了所有未注释为未序列化的字段。 当我添加类似于下面列出的注释时,字段被序列化。
员工
package com.test;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Employee {
@Expose @SerializedName("NAME")
private String name;
@Expose @SerializedName("GRADES")
private List<Grade> grades;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Grade> getGrades() {
return grades;
}
public void setGrades(List<Grade> grades) {
this.grades = grades;
}
}
年级
package com.test;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Grade {
public Grade(String grade) {
super();
this.grade = grade;
}
@Expose @SerializedName("GRADE")
private String grade;
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.