我对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)
最好的方法是什么? 有一种替代方法可以做到这一点,而无需编写自己的序列化器/解析器吗?
实际上我使用的是代码:
deserializedOBJ.params = gson.fromJson(element, Class.forName("MyProtocol$ProtoAuth"));
答案 0 :(得分:6)
我会输入ProtoQuery如下:
public static class ProtoQuery<T> {
public String action;
public String token;
public T params;
public ProtoQuery(String action, String token, T 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;
}
}
并使用ProtoAuth类型的参数进行反序列化,您可以调用如下:
Type type = new TypeToken<ProtoQuery<ProtoAuth>>() {}.getType();
ProtoQuery<ProtoAuth> deserializedOBJ = gson.fromJson(json, type);