让我们假设我们有这个json:
{
"id": 1,
"first_name": "name"
"studentId": "1235234"
}
我知道我可以通过像这样制作类来对GSON进行反序列化:
class Student {
int id;
String first_name;
String studentId;
}
有没有办法通过使用两个类来实现相同的结果,即
class User {
int id;
String first_name;
}
class Student {
User user;
String studentId;
}
有没有办法为GSON指定一些注释,以便它知道如何填充'user'对象,除了Student类扩展User类?
更新:
1)感谢有关扩展的建议,但我忘了提到我无法扩展'用户'(不要问为什么:)),所以这就是为什么我首先要寻找解决方法
2)自定义反序列化器可以完成这项工作,但是我有多个类中包含“User”,所以这意味着要添加很多类,我也想避免这种情况。
提前致谢, 米洛斯
答案 0 :(得分:0)
只需将学生班级的结构更改为
即可public class StudentData{
private String studentId;
private User user;
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public class User {
int id;
String first_name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
}
}
答案 1 :(得分:0)
定义自定义反序列化器:
public class StudentDeserializer implements JsonDeserializer<Student>{
@Override
public Student deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2)
throws JsonParseException {
JSONObject jobject = (JsonObject) arg0;
Student st = new Student();
st.studentId = jobject.get("studentId").getAsString();
st.user = new User();
st.user.id = jobject.get("id").getAsInt();
st.user.first_name = jobject.get("first_name").getAsString()
return Student;
}
}
然后在反序列化之前注册它:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Student.class, new StudentDeserializer());