GSON-JSON反序列化类中的对象

Kai*_*r69 1 java json gson

我对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);
Run Code Online (Sandbox Code Playgroud)

这里的问题是: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"));
Run Code Online (Sandbox Code Playgroud)

Gui*_*let 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用ProtoAuth类型的参数反序列化,您可以调用如下:

Type type = new TypeToken<ProtoQuery<ProtoAuth>>() {}.getType();
ProtoQuery<ProtoAuth> deserializedOBJ = gson.fromJson(json, type);
Run Code Online (Sandbox Code Playgroud)