如何使gson.toJson对于SdkVersion 28上的“ Size”类对象正确工作?

时间:2019-03-29 11:39:00

标签: android gson

当我将SdkVersion从27更改为28时,“大小”类对象的gson.toJson结果变为空。 进一步检查,对于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 :(得分:0)

目前,我通过添加自定义序列化解决了该问题。

    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是否有问题。