Gson - как сериализовать / десериализовать поле, основываясь на значении другого поля? - PullRequest
2 голосов
/ 11 апреля 2019

У нас довольно большой класс:

class Foo {
    // ... many fields
    @Expose
    @JsonAdapter(DateAdapter.class)
    Date start;

    @Expose
    String startTimeZone;
    // ... more fields
}

Теперь локально значения запуска сохраняются как UTC, а информация о часовом поясе хранится отдельно в startTimeZone. Однако при отправке данных на сервер нам нужно преобразовать начало в startTimeZone и отформатировать его в строку «ГГГГ-мм-дд ЧЧ: мм: сс».

У нас есть класс DateAdpater

public class DateAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> {

    @Override
    public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
            throws JsonParseException {
        return DateUtils.parseServerDateTime(json.getAsString);
    }

    @Override
    public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(DateUtils.formatServerDateTime(src));
    }
}

Однако в DateAdapter у нас нет доступа к полю startTimeZone, поэтому мы не можем использовать его для форматирования / синтаксического анализа.

Я знаю, что мы могли бы написать собственный адаптер для всего класса, но, как уже было сказано, класс довольно большой, поэтому я бы предпочел другое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...