#java #gson
#java #gson
Вопрос:
Я создал десериализацию, которая всякий раз, когда она видит строку «nil», возвращает null.
private static Gson createCustomGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(String.class, new JsonDeserializer<String>() {
@Override
public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
return (json.getAsString().equals("nil")) ? null : json.getAsString();
}
});
return gsonBuilder.create();
}
Это работает хорошо, за исключением того, что я хочу добавить исключение, где для поля «Ключевое слово», в котором хранится список, я не хочу исключать nil для возврата null, но сохранить строку. Как добавить исключение для «Ключевого слова»?
Мое ключевое слово class имеет следующий тип
public class KeywordListing implements Serializable {
List<String> keys;
}
Ответ №1:
Найдено решение. Это путем добавления другого TypeAdapter для возврата десериализации по умолчанию из Gson, как показано ниже.
private static Gson createCustomGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(String.class, new JsonDeserializer<String>() {
@Override
public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
return (json.getAsString().equals("nil")) ? null : json.getAsString();
}
});
gsonBuilder.registerTypeAdapter(KeywordListing.class, new JsonDeserializer< KeywordListing >() {
@Override
public KeywordListing deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
return new Gson().fromJson(json, KeywordListing.class);
}
});
return gsonBuilder.create();
}
Дайте мне знать, если есть более короткий ответ, чем тот, который я получил выше.