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();