JSON结构如下所示:
"blabla": 1234,
"blabla2": "1234",
"object": {
"property1": "1234",
"property2": "blablab",
"property3": "12345",
"property4": Date object,
}
}
由于这种结构,我实现了一个自定义反序列化器并在TypeAdapter中传递它:
.registerTypeAdapter(Date.class, new DateDeserializer())
.registerTypeAdapter(GenericNotificationResponse.class, new NotificationDeserializer())
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss")
.create();
public class NotificationDeserializer implements JsonDeserializer<GenericNotificationResponse> {
@Override
public GenericNotificationResponse deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject content = json.getAsJsonObject();
GenericNotificationResponse message = new Gson().fromJson(json, typeOfT);
JsonElement notification = content.get("notification");
if (message.mType == 1)
message.mNotification = (new Gson().fromJson(notification, Model1.class));
else if (message.mType == 2)
message.mNotification = (new Gson().fromJson(notification, Model2.class));
return message;
}
}
内部对象的反序列化很好。直到最近,当我更改模型并开始接收Date对象时,如JSON结构中所示,最后一个属性。由于某种原因,它无法解析它并且它会抛出错误,所以我似乎没有调用我在TypeAdapter中传递的DateDeserializer,因为这些行:
message.mNotification = (new Gson().fromJson(notification, Model1.class));
message.mNotification = (new Gson().fromJson(notification, Model2.class));
DateDeserializer可以工作,因为我在其他模型中使用它并且它可以解决问题。有什么办法可以在内部json对象中对date属性进行反序列化吗?谢谢!
答案 0 :(得分:1)
执行此操作时:
message.mNotification = (new Gson().fromJson(notification, Model1.class));
您正在使用没有Gson()
的新DateDeserializer
实例进行反序列化。
尝试这样的事情:
new GsonBuilder().registerTypeAdapter(Date.class, new DateDeserializer())
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss")
.create().fromJson(notification, Model1.class));
显然,Model2也是如此。