Gson如何知道哪个json元素使用哪个Deserializer

时间:2017-11-02 04:14:27

标签: android gson

我有以下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?

如果我放入更多其他自定义反序列化器,它将如何知道哪个元素使用哪个反序列化器?

非常感谢。

1 个答案:

答案 0 :(得分:0)

Gson对给定类型使用最后添加的反序列化器,并对所有情况使用反序列化器。在您的情况下,它将使用您的反序列化程序用于任何和所有Longs