Gson 和 Active Android:尝试序列化 java.lang.Class。忘记注册类型适配器?
Gson and Active Android: Attempted to serialize java.lang.Class. Forgot to register a type adapter?
我正在使用 Gson 序列化一个 Active Android 模型。模型 class 只包含基元,Gson 使用默认设置序列化它应该没有问题。但是,当我尝试时,出现错误:
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: <MyClass>. Forgot to register a type adapter?
我真的不想为我的每个模型都编写一个类型适配器 classes,我该如何解决这个问题?
想通了。当然,Active Android 的基本模型 class 正在添加默认情况下无法序列化的字段。可以使用 Gson 的 excluedFieldsWithoutExposeAnnotation()
选项忽略这些字段,如下所示:
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
String json = gson.toJson(new Book());
用@Expose
注解修改class,指明应该序列化哪些字段:
@Table(name = "Foo")
public class Foo extends Model {
@Expose
@Column(name = "Name")
public String name;
@Expose
@Column(name = "Sort")
public int sort;
...
}
一种更简单的方法是如下初始化 Gson 以防止序列化 Final、Transient 或 Static 字段
Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
.serializeNulls()
.create();
我正在使用 Gson 序列化一个 Active Android 模型。模型 class 只包含基元,Gson 使用默认设置序列化它应该没有问题。但是,当我尝试时,出现错误:
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: <MyClass>. Forgot to register a type adapter?
我真的不想为我的每个模型都编写一个类型适配器 classes,我该如何解决这个问题?
想通了。当然,Active Android 的基本模型 class 正在添加默认情况下无法序列化的字段。可以使用 Gson 的 excluedFieldsWithoutExposeAnnotation()
选项忽略这些字段,如下所示:
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
String json = gson.toJson(new Book());
用@Expose
注解修改class,指明应该序列化哪些字段:
@Table(name = "Foo")
public class Foo extends Model {
@Expose
@Column(name = "Name")
public String name;
@Expose
@Column(name = "Sort")
public int sort;
...
}
一种更简单的方法是如下初始化 Gson 以防止序列化 Final、Transient 或 Static 字段
Gson gson = new GsonBuilder()
.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC)
.serializeNulls()
.create();