Gson не может привести класс "Object" в мой объект - PullRequest
0 голосов
/ 04 марта 2020

Я использую Gson , чтобы привести мой класс к Json, у меня есть поле с именем payload , которое должно быть само моим классом.

My Класс выглядит следующим образом:

public class MyClass {
    private Long id;
    private String name;
    private Object payload;
}

Но когда я использую его следующим образом:

MyClass myClassObj = MyClass()
myClassObj.setId(1L);
myClassObj.setName("Example");
myClassObj.setPayload(myClassObj);

И я вижу результат:

String result = new Gson().toJson(myClassObj);

Результат делает не содержит полезных данных.

{"id":1, "name":"Example"}

Мне нужно что-то вроде:

{"id":1, "name":"Example", "payload": {"id":1, "name":"Example"}}

Заранее спасибо. Любая помощь будет полезна.

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Я нашел решение, Объект может быть любым, поэтому прежде чем установить полезную нагрузку моего класса, я сделал следующее:

myClassObj.setPayload(new Gson.fromJson(myClassObj.toString(), myClassObj.class);

Примечание:

В MyClass у меня есть метод переопределения toString следующим образом:

    @Override
    public String toString() {
        return new Gson().toJson(this);
    }

Если у кого-то есть лучшее решение, не стесняйтесь опубликовать его.

0 голосов
/ 04 марта 2020

Вам нужно будет изменить его, чтобы определить его так:

public class MyClass {
  private Long id;
  private String name;
  private MyClass payload = null;
}

Сериализированные Gson параметры, которые не являются переходными. Объект не имеет параметров "id" и "name", которые вы хотите сериализовать. MyClass делает. Убедитесь, что значение по умолчанию для полезной нагрузки равно нулю, в противном случае у вас может быть бесконечный l oop на руках при сериализации до json.

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