1

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で「アクション」パラメータを使用します。

deserializedOBJ.params = gson.fromJSON(json.object、ProtoAuth.class)のようなものが必要です

これを行うための最良の方法は何ですか?独自のシリアライザー/デシリアライザーを作成せずに、これを行うための代替手段はありますか?

実際に私はそのコードを使用します:

deserializedOBJ.params = gson.fromJson(element, Class.forName("MyProtocol$ProtoAuth"));
4

1 に答える 1

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);
于 2012-05-12T22:53:10.923 に答える