如果您尝试序列化具有 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 的代码片段

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)
当前实现背后的原因可能是什么?我哪里错了?

最佳答案

正如@Programmer Bruce Gson not parsing Class variable 所回答-

comment in issue 340 中,Gson 项目经理解释说:



当然,由于序列化与

反序列化,我不明白这是如何解释
禁用序列化,除非未提及的概念在某种意义上
“平衡”序列化与反序列化的默认行为。

10-06 05:11
查看更多