次のような単純な Json 構造があります。
{"MessageType":"TimeData","TimeData":{"hh":12,"mm":13,"ms":15,"ss":14}}
そして、それを逆シリアル化するために次のクラスを考案しました。
public class JsonMessage
{
public enum MessageTypes{
WhoAreYou,
TimeData
}
JsonMessage(){
}
public MessageTypes MessageType;
}
class TimeData extends JsonMessage{
int hh;
int mm;
int ss;
int ms;
TimeData() {
}
}
逆シリアル化を 2 つのフェーズに分割する必要があります。
1- を読み取るためにデシリアライズしますMessageType
。
2- に基づいて、残りの逆シリアル化を続行します。MessageType
コードは簡単です。
public void dispatch(Object message, IoSession session)
{
Gson gson = new Gson();
JsonMessage result = gson.fromJson(message.toString(), JsonMessage.class);
System.out.println(result.MessageType.toString());
switch (result.MessageType)
{
case WhoAreYou:{
//.....
break;
}
case TimeUpdate:
TimeData res = new Gson().fromJson(message.toString(), TimeData.class);
System.out.println(res.hh);
break;
default:break;
}
}
私のプログラムは正しいswitch-case
(これは ですTimeUpdate
) を入力できますが、正しく解析しません (println は 12 ではなく 0 を出力します)
私がどこで何か悪いことをしたと思いますか?ありがとうございました