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);
:
は、次のコードを見てみましょう は、のLinkedHashMapを返すdeserializedOBJ.object。 私はProtoAuthオブジェクトに戻って変換したいのですが...私はそれがProtoAuthであることをどのように知ることができますか? ProtoQueryで "action"パラメータを使用する。私は
これを行うための最善の方法は何ですか? deserializedOBJ.params = gson.fromJSON(json.object、ProtoAuth.class)のようなものを必要としますか これを行うには、自分のシリアライザ/デシリアライザを書かずに別の方法がありますか?
実は私はそのコードを使用します。私は、次のようProtoQueryを入力し
deserializedOBJ.params = gson.fromJson(element, Class.forName("MyProtocol$ProtoAuth"));
私はあなたが "ProtoAuth"としてparamsを宣言することはできないと思いますか? –
いいえ、paramsはProtoAuth、ProtoReq、ProtoStatus、ProtoEccになる可能性があるので、私はクラス内でクエリをラップしています。(外部の開発者はProtocol.javaと内部クラスを読んで、 – Kaiser69