我有以下json输入。并且知道我正在使用Gson进行解析。
{
“type”: “type1”,
“date”: “Tue, 16 May 2017 07:09:33 +0000”,
“body”:
{
“formatA_1”: “aaa”,
“formatA_2”: “bbbcccddd”
}
"other": "info"
}
public class Data {
private String type;
private Long date;
private Body body;
private String other;
...
}
由于我想将日期转换为long,所以我实现了自定义DateDeserializer。
public class DateDeserializer implements JsonDeserializer<Long> {
@Override
public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return DateConvertUtils.convertStringDatetoLong(json.getAsString(), DateConvertUtils.SERVER_DATE_FORMAT);
}
}
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Long.class, new DateDeserializer());
Gson gson = gsonBuilder.create();
Data data = gson.fromJson(json, Data.class);
这很有效。但我想知道,Gson怎么知道只有&#34; date&#34; element需要使用DateDeserializer吗?它怎么知道其他元素不需要使用DateDeserializer?
如果我放入更多其他自定义反序列化器,它将如何知道哪个元素使用哪个反序列化器?
非常感谢。
答案 0 :(得分:0)
Gson对给定类型使用最后添加的反序列化器,并对所有情况使用反序列化器。在您的情况下,它将使用您的反序列化程序用于任何和所有Longs