我有一個名爲「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