我有一个简单的类包含name
类型变量java.lang.CharSequence
class Person {
public java.lang.CharSequence name;
}
当我尝试使用 GSON 库反序列化 JSON 字符串时
Person p;
Gson gson = new Gson();
String json = "{\"name\":\"dinesh\"}";
p = gson.fromJson(json, Person.class);
System.out.println(p);
它给了我以下错误:
java.lang.RuntimeException:无法调用接口 java.lang.CharSequence 的无参数构造函数。向 Gson 注册此类型的 InstanceCreator 可能会解决此问题。
我该如何解决?我无法改变Person.name
键入至String
.
正如评论中所建议的,
我创建了一个自定义适配器CharSequence
class CharSequenceAdapter extends TypeAdapter<CharSequence> {
@Override
public void write(JsonWriter out, CharSequence value) throws IOException {
}
@Override
public CharSequence read(JsonReader in) throws IOException {
String s = new String();
in.beginObject();
while(in.hasNext()) {
s = in.nextString();
}
return s;
}
}
我的 GSON 构建器如下所示:
Person p;
GsonBuilder builder = new GsonBuilder().registerTypeAdapter(java.lang.CharSequence.class, new CharSequenceAdapter());
Gson gson = builder.create();
String json = "{\"name\":\"dinesh\"}";
p = gson.fromJson(json, Person.class);
System.out.println(p);
现在它给了我另一个错误:
应为 BEGIN_OBJECT,但在第 1 行第 10 列路径 $.name 处为 STRING
我错过了什么?
我不认为这是重复的。所有其他问题都讨论将一个类或接口作为一个整体进行反序列化。我遇到一个将接口引用作为成员变量的类的问题。我无法从类似的答案中解决问题。