GSON сериализация не возвращает правильную строку json - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь сериализовать объект этого формата с помощью 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 голосов
/ 12 октября 2018

Я вижу, у вас есть пользовательский объект с именем 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...