17

我正在使用 Gson 序列化一个 Active Android 模型。模型类只包含原语,Gson 使用默认设置序列化它应该没有问题。但是,当我尝试时,我得到了错误:

java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: <MyClass>. Forgot to register a type adapter?

我真的不想为我的每个模型类编写一个类型适配器,我该如何解决这个问题?

4

2 回答 2

23

弄清楚了。当然,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;

    ...
}
于 2015-04-28T00:19:22.290 回答
15

一种更简单的方法是如下初始化 Gson 以防止序列化 Final、Transient 或 Static 字段

Gson gson = new GsonBuilder()
            .excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
            .serializeNulls()
            .create();
于 2015-06-03T22:43:18.670 回答