我正在使用Gson序列化Active Android模型。模型类只包含基元,Gson应该没有问题使用默认设置序列化它。但是,当我尝试时,我收到错误:
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: <MyClass>. Forgot to register a type adapter?
我真的不想为每个模型类编写一个类型适配器,我该如何解决这个问题呢?
答案 0 :(得分: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;
...
}
答案 1 :(得分:14)
更简单的方法是初始化您的Gson,如下所示,以防止序列化Final,Transient或Static字段
Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
.serializeNulls()
.create();