我在GSON-JSON中遇到了一些問題。GSON-JSON反序列化類中的對象
我們看到下面的代碼:
public static class ProtoQuery {
public String action;
public String token;
public Object params;
public ProtoQuery(String action, String token, Object params) {
this.action = action;
this.token = token;
this.params = params;
}
}
// Authentication Phase
public static class ProtoAuth {
public String username;
public String password;
public ProtoAuth(String username, String password) {
this.username = username;
this.password = password;
}
}
// Serialize Object
Gson gson = new Gson();
ProtoQuery tmp = new ProtoQuery("ProtoAuth", "", new JirckeProtocol.ProtoAuth("ABC", "myPASS"));
String json = gson.toJson(tmp);
// Deserialize Object
ProtoQuery deserializedOBJ = gson.fromJson(json, ProtoQuery.class);
問題就在這裏: deserializedOBJ.object返回LinkedHashMap中。 我想轉換回ProtoAuth對象..我怎麼知道這是一個ProtoAuth?在ProtoQuery中使用「action」參數。
我需要這樣的東西 deserializedOBJ.params = gson.fromJSON(json.object,ProtoAuth.class)
什麼是做到這一點的最好方法是什麼? 還有一種方法可以做到這一點,無需編寫我自己的序列化器/ deserialer?
其實我使用該代碼:
deserializedOBJ.params = gson.fromJson(element, Class.forName("MyProtocol$ProtoAuth"));
我想你不能將params聲明爲「ProtoAuth」? –
不,因爲參數可以是ProtoAuth,ProtoReq,ProtoStatus,ProtoEcc ...我將我的查詢包裝在類中,我認爲它對於更好的文檔是有用的(外部開發人員可以讀取Protocol.java和內部類並知道什麼請求和每個查詢的參數) – Kaiser69