【发布时间】:2020-02-16 00:59:59
【问题描述】:
我有一个简单的类,其中包含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。
按照 cmets 的建议,
我为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
我错过了什么?
我不认为它是重复的。所有其他问题都讨论了将一个类或接口作为一个整体进行反序列化。我遇到了一个将接口引用作为成员变量的类的问题。我无法从类似的答案中解决问题。
【问题讨论】:
标签: java json serialization gson