Как заставить gson.toJson корректно работать с объектами класса 'Size' в SdkVersion 28? - PullRequest
1 голос
/ 29 марта 2019

Когда я изменил SdkVersion с 27 на 28, результат gson.toJson объектов класса 'Size' стал пустым. Дальнейшее изучение, в случае Sdk версии 28, эмулятор API 26 дает правильные результаты. Однако оказалось, что результат пуст в эмуляторе API28. Подскажите пожалуйста, как нормально работать с SdkVersion 28.

- build.gradle

compileSdkVersion 28
targetSdkVersion 28
implementation 'com.google.code.gson:gson:2.8.5'

- исходный код

import android.util.Size;

Gson gson = new Gson();
Size s = new Size(30,40);
Log.d("TAG", "s " + gson.toJson(s));

- Журнал эмулятора (Android 8.0.0, API26)

2019-03-29 20:00:01.375 6212-6212/com.example.test D/TAG: s {"mHeight":40,"mWidth":30}

- Журнал эмулятора (Android 9, API28)

2019-03-29 20:03:40.310 8152-8152/com.example.test D/TAG: s {}

1 Ответ

0 голосов
/ 01 апреля 2019

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

    private class SizeSerializer implements JsonSerializer<Size> {
        public JsonElement serialize(Size src, Type typeOfSrc, JsonSerializationContext context) {
            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty("mHeight", src.getHeight());
            jsonObject.addProperty("mWidth", src.getWidth());
            return jsonObject;
        }
    }
    Gson gson = new GsonBuilder()
            .registerTypeAdapter(Size.class, new SizeSerializer())
            .create();

Я не знаю, правильный ли это ответ или есть ли проблема с sdk.

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