다음 json 입력이 있습니다. 그리고 저는 Gson을 사용하여 구문 분석하고 있음을 알고 있습니다.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;
...
}
저는 날짜를 길게 변환하려고하므로 사용자 정의 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);
하지만 Gon이 DateDeserializer를 사용해야하는 "날짜"요소 만 알았는지 궁금합니다. 다른 요소가 DateDeserializer를 사용할 필요가 없다는 것을 어떻게 알 수 있습니까?
다른 맞춤형 디시리얼라이저를 추가하면 어떤 요소가 어떤 디시리얼라이저를 사용해야하는지 어떻게 알 수 있습니까?
고마워요.
다른 String을 private으로 변경해보십시오. long other – Mars
@Mars, 모든 유형 Long에 대해 구문 분석을 위해 DateDeserializer()를 사용합니다. 이 방법을 사용하면 복잡하고 다른 데이터 유형을 사용할 때 약간의 함정을 가질 수 있습니다. 내 코드에서 눈치 채지 않고 Date 구문 분석 예외, 다음 0 반환하십시오. 그래서 내 다른 긴 형식을 0이됩니다. 유일한 방법은 예외 경우 원래 값을 반환하는 것입니다? 이것을하는 방법입니까? –
잠시 후, 아래 답변 해 드리겠습니다. – Mars