2012-06-05 64 views
2

我在写一个函数,它使用Gson将Java对象序列化为Json。使用Gson序列化Java对象的字段对象

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

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?

感谢

+0

有'tc2'是'null'以外的东西。在你的例子中没有任何东西需要编码。 –

回答

3

领域被忽略,因为它是null。从documentation

是在GSON实现是空对象字段被忽略的默认行为。这允许更紧凑的输出格式;但是,当JSON格式转换回Java时,客户端必须为这些字段定义默认值。

这里是你将如何配置GSON实例输出空:

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

如果设置tc.tc2null以外的值,你应该看到在输出文件中的字段。

2

有了您的具体的例子,添加一个构造函数,这将使TC2的新实例:

public TestClass() 
{ 
    tc2 = new TestClass2(); 
} 

,并看看是否有帮助。如果在您的真实代码中,与TestClass2相似的类也具有参考类,请同时创建它们的新实例

2

在Java中,对象字段默认情况下未初始化,这意味着tc2字段将为null,除非你把它设置成某种东西。 Gson默认忽略空字段,因此不会序列化它。

您可以在构造函数中初始化该字段,就像其他答案正确地说的那样。或者你也可以初始化它做以下操作:

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