我在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