繁体   English   中英

GSON - 将具有通用列表的对象转换为 JSON 字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM