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

时间:2016-04-18 20:02:14

标签: java json spring gson

我看到一个空洞的回答" {}"当我跑下面的时候。 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;
    }



}

修改

我发现下面的代码导致了这个问题。如果if声明新的gson()并使用gson对象,则它按预期工作 -

        this.setGson(new GsonBuilder()
            .excludeFieldsWithoutExposeAnnotation()
            .registerTypeHierarchyAdapter(byte[].class,
                    new GsonByteArrayHandler())
            .registerTypeHierarchyAdapter(boolean.class,
                    new GsonBooleanHandler())
            .registerTypeHierarchyAdapter(Date.class,
                    new GsonDateHandler())
            .create());

1 个答案:

答案 0 :(得分:1)

引起问题的是excludeFieldsWithoutExposeAnnotation(),它排除了未注释为未序列化的所有字段。当我添加类似于下面列出的注释时,字段被序列化。

<强> EMPLOYEE

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;
    }
}

<强> GRADE

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;
    }



}
相关问题