Gson和Active Android:尝试序列化java.lang.Class.忘了注册一个类型适配器?

GLe*_*Lee 16 android gson activeandroid

我正在使用Gson序列化Active Android模型.模型类只包含基元,Gson应该没有问题使用默认设置序列化它.但是,当我尝试时,我收到错误:

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

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

GLe*_*Lee 23

弄清楚了.当然,Active Android的基础模型类正在添加默认情况下无法序列化的字段.使用Gson的excluedFieldsWithoutExposeAnnotation()选项可以忽略这些字段,如下所示:

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
String json = gson.toJson(new Book());
Run Code Online (Sandbox Code Playgroud)

使用@Expose注释修改类以指示应序列化哪些字段:

@Table(name = "Foo")
public class Foo extends Model {

    @Expose
    @Column(name = "Name")
    public String name;

    @Expose
    @Column(name = "Sort")
    public int sort;

    ...
}
Run Code Online (Sandbox Code Playgroud)


meh*_*hdi 14

更简单的方法是初始化您的Gson,如下所示,以防止序列化Final,Transient或Static字段

Gson gson = new GsonBuilder()
            .excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
            .serializeNulls()
            .create();
Run Code Online (Sandbox Code Playgroud)