我正在尝试使用GSON序列化这种格式的对象
这是我的代码:
public String encode(Object object){
return this.gson.toJson(object);
}
问题出在这里是我得到的结果:
"m_Volume": 57056040
与我的预期相反:
"m_Volume": {
"m_Exponent": 0,
"m_Mantissa": [4, 3, 102, -101, 40]
}
任何帮助/建议都会很棒。谢谢!
答案 0 :(得分:1)
我看到您有一个名为XempBigDecimal
的自定义对象
也许代替:
public String encode(Object object){
return this.gson.toJson(object);
}
尝试传递具体类型:
public String encode(XempBigDecimal object){
return this.gson.toJson(object);
}
编辑
我试图通过单元测试来复制您的案例,如下所示:
public class GsonTest {
private Gson gson;
@Before
public void setUp() {
gson = new Gson();
}
@Test
public void shouldCreateJson() {
XempBigDecimal object = new XempBigDecimal(new m_Volume(0, new byte[] {4, 3, 102, -101, 40}));
String json = encode(object);
assertThat(json).isEqualTo("{\"m_Volume\":{\"m_Exponent\":0,\"m_Mantissa\":[4,3,102,-101,40]}}");
}
public String encode(Object object) {
return gson.toJson(object);
}
public String encodeType(XempBigDecimal object) {
return gson.toJson(object);
}
private class XempBigDecimal {
public XempBigDecimal(GsonTest.m_Volume m_Volume) {
this.m_Volume = m_Volume;
}
private m_Volume m_Volume;
}
private class m_Volume {
public m_Volume(int m_Exponent, byte[] m_Mantissa) {
this.m_Exponent = m_Exponent;
this.m_Mantissa = m_Mantissa;
}
private int m_Exponent;
private byte[] m_Mantissa;
}
}
并且此测试通过,因此将参数定义为Object
类型可能不是问题。您的对象或类定义可能有问题吗?也许m_Exponent
和m_Mantissa
被Gson忽略了?当它们后跟transient
关键字时,可能会发生这种情况。