【发布时间】:2015-12-01 17:47:59
【问题描述】:
如果您尝试序列化具有java.lang.Class 类型字段的对象,则将其序列化将导致java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: <some_class> Forgot to register a type adapter
下面是来自 com.google.gson.internal.bind.TypeAdapters.java 的代码 sn-p
public final class TypeAdapters {
.
.
.
public static final TypeAdapter<Class> CLASS = new TypeAdapter<Class>() {
@Override
public void write(JsonWriter out, Class value) throws IOException {
if (value == null) {
out.nullValue();
} else {
throw new UnsupportedOperationException("Attempted to serialize java.lang.Class: "
+ value.getName() + ". Forgot to register a type adapter?");
}
}
.
.
.
}
在 gson 中编码是否只是为了提醒人们“忘记注册类型适配器”?
在我看来,Class 类型对象可以很容易地使用以下语句进行序列化和反序列化:
序列化:clazz.getName()
反序列化:Class.forName(className)
当前实施背后的原因可能是什么?我哪里错了?
【问题讨论】:
-
好的,谢谢。似乎这个问题是在问同样的问题。我想我的问题中的描述消除了一些困惑。我将使用那里的答案自己回答这个问题。
标签: java serialization gson