我有一个Java类User:
public class User
{
int id;
String name;
Timestamp updateDate;
}
我收到一个JSON列表,其中包含来自Web服务的用户对象:
[{"id":1,"name":"Jonas","update_date":"1300962900226"},
{"id":5,"name":"Test","date_date":"1304782298024"}]
我尝试编写一个自定义反序列化程序:
@Override
public User deserialize(JsonElement json, Type type,
JsonDeserializationContext context) throws JsonParseException {
return new User(
json.getAsJsonPrimitive().getAsInt(),
json.getAsString(),
json.getAsInt(),
(Timestamp)context.deserialize(json.getAsJsonPrimitive(),
Timestamp.class));
}
但是我的反序列化器不工作,我如何为Gson编写一个自定义的JSON反序列化器呢?
3条答案
按热度按时间km0tfn4u1#
我将采取如下稍微不同的方法,以便最大限度地减少代码中的“手动”解析,因为不必要地这样做会在某种程度上违背我最初使用Gson等API的目的。
(This假设“date_date”应为原始问题中的“update_date”。)
ktecyv1j2#
我假设User类具有适当的构造函数。
ctrmrzij3#
今天我在寻找这个东西,因为我的类有
java.time.Instant
,默认的gson不能反序列化它。我的POJO看起来像这样:然后对于
Instant
变量,我解析json的时间变量,并将字符串转换为Instant。对于integer、string等,我使用jsonObject.get("id").asInt
等。对于其他pojo,我使用默认的反序列化器,如下所示:因此,相应的自定义反序列化程序如下所示:
最后,我创建了如下自定义gson: