我正在编写一个使用Gson将Java对象序列化为Json的函数。

我的问题是,它只序列化我类的原始字段,而不序列化对象字段。例如。我有两个类,如:

class TestClass {
    public int i = 10;
    public TestClass2 tc2;
}

class TestClass2 {
    public int j = 20;
}


我的测试是:

@Test
public void shouldSerializeSimpleObjectIntoJson() {
    TestClass tc = new TestClass();

    String json = new Gson().toJson(tc);
    System.out.println(json);
}


Json输出为:

{"i":10}


它不包含tc2的字段。

如何配置Gson以将对象递归编码为Json?

谢谢

最佳答案

该字段被忽略,因为它是null。从documentation

Gson中实现的默认行为是忽略空对象字段。这允许更紧凑的输出格式。但是,当JSON格式转换回Java时,客户端必须为这些字段定义默认值。
这是配置Gson实例以输出null的方法:

Gson gson = new GsonBuilder().serializeNulls().create();


如果将tc.tc2设置为null以外的其他值,则应在输出文件中看到其字段。

10-07 19:09
查看更多