Как десериализовать YearMonth с Gson в Android API < 26 / Java 7?

У меня в настоящее время есть ответ как:

[
  "2017-12",
  "2018-01",
  "2018-02",
  "2018-03"
]

который должен быть преобразован в YearMonth, Но так как Android не поддерживает YearMonth до API 26 я не могу использовать его в своем приложении.

Мне не нужна какая-то необычная функция, которая YearMonth есть. Все, что я хочу, это просто способность де-сериализации из / в String, Как мне этого добиться?

Я сейчас пользуюсь Gson,

1 ответ

Решение

В основном вы просто должны де-/ сериализовать String[], Смотрите ниже тестовые случаи:

@Slf4j
public class YearMonthStringTest {

    public static final String json = 
            "[\n"
            + "  \"2017-12\", \n"
            + "  \"2018-01\", \n"
            + "  \"2018-02\", \n"
            + "  \"2018-03\" \n"
            + "]";

    @Test
    public void fromJsonTest() {
        String[] strs = new Gson().fromJson(json, String[].class);
        Arrays.asList(strs).forEach(str -> {
            log.info("{}", str);
        });
    }

    @Test
    public void toJsonTest() {
        String[] str = new String[] { "2001-01", "1984-02"
                                    , "1878-11", "0000-12" };
        String jsonFromArray = new GsonBuilder()
                .setPrettyPrinting().create().toJson(str);
        log.info("json from array:\n{}", jsonFromArray);
    }

}

YearMonth был введен в Java 8 так что это в целом Java 7 вопрос.

Другие вопросы по тегам