GSON serializtion没有返回正确的json字符串

时间:2018-10-11 21:21:00

标签: java json gson

我正在尝试使用GSON序列化这种格式的对象

Object structure

这是我的代码:

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

任何帮助/建议都会很棒。谢谢!

1 个答案:

答案 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_Exponentm_Mantissa被Gson忽略了?当它们后跟transient关键字时,可能会发生这种情况。