Gson и Active Android: Попытка сериализации java.lang.Class. Забыл зарегистрировать адаптер типа?
Я использую Gson для сериализации модели Active Android. Класс модели содержит только примитивы, и у Gson не должно быть проблем с сериализацией его с настройками по умолчанию. Однако, когда я пытаюсь, я получаю сообщение об ошибке:
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: <MyClass>. Forgot to register a type adapter?
Я бы предпочел не писать адаптер типа для каждого из моих классов моделей, как я могу обойти эту проблему?
Ответы
Ответ 1
Выяснил это. Конечно, базовая модель Active Android добавляет поля, которые по умолчанию не могут быть сериализованы. Эти поля можно игнорировать с помощью опции Gson excluedFieldsWithoutExposeAnnotation()
:
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
String json = gson.toJson(new Book());
Измените класс с помощью аннотации @Expose
, чтобы указать, какие поля должны быть сериализованы:
@Table(name = "Foo")
public class Foo extends Model {
@Expose
@Column(name = "Name")
public String name;
@Expose
@Column(name = "Sort")
public int sort;
...
}
Ответ 2
проще всего инициализировать ваш Gson, как показано ниже, чтобы предотвратить сериализацию полей Final, Transient или Static
Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
.serializeNulls()
.create();