【发布时间】:2013-04-25 16:25:29
【问题描述】:
我有一个简单的 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() {
}
}
我需要将反序列化分成两个阶段:
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 打印的是 0 而不是 12)
你认为我哪里做错了? 谢谢
【问题讨论】:
-
你可以去http://stackoverflow.com/a/22081826/3315914看看。我在那里回答了一个类似的问题。