我有一个名为“Clerk”的具体类,它实现了一个名为“Worker”的接口。我想反序列化我的秘书对象,并将其存储到一个工人对象,就像我们通常可以做,如果我有这样的:将具体类型的对象反序列化为接口类型
Worker clerkWorker = new Clerk("abc", "alice white");
只有而是我有,我想反序列化,并存储到clerkWorker店员JSON:
{
"uid": "1a-2wq"
"name": "Maryanne Chen"
}
接口:
public interface Worker {
int getUID();
String getName();
void work();
}
类实现它:
private class Clerk implements Worker {
int uid;
String name;
public Clerk(id, fullname) {
uid = id;
name = fullname;
}
public void work() {
System.out.println("Clerk is processing files");
}
}
按照这里介绍的第二个解决方案:Using Gson with Interface Types我复制RuntimeTypeAdapterFactory本地使用它:
RuntimeTypeAdapterFactory typeFactory =
RuntimeTypeAdapterFactory.of(Worker.class, "type");
typeFactory.registerSubtype(Clerk.class);
Gson gson = new GsonBuilder().registerTypeAdapterFactory(typeFactory).create();
final Reader r = getReader(jsonFile);
return gson.fromJson(r, typeToken.getType());
我已经验证了我的getReader功能正在工作。我收到一个异常:
“无法反序列化接口Worker,因为它没有定义名为type的字段”。
你是什么'json'好像? – njzk2