阵列反序列化期间未调用GSON TypeAdapter

时间:2019-07-19 14:11:37

标签: android json gson json-deserialization

因为Gson在反序列化过程中通过无参数构造函数使用反射来构建对象,所以我正在编写TypeAdapter,它将对我的对象使用适当的构造函数。我之所以需要这样做,是因为我要反序列化的对象是另一个对象的子类,并且需要适当地调用超级构造函数。

我正在尝试反序列化看起来像这样的JSON数组(这是示例数据,而不是对象的实际结构):

[
    {
        "id": "...",
        "name": "...",
        "description": "...",
        "others": [
            {
                "key1": "val",
                "key2": "val"
            },
            ...
        ]
    },
    {
        "id": "...",
        "name": "...",
        "description": "...",
        "others": [
            {
                "key1": "val",
                "key2": "val"
            },
            ...
        ]
    },
    ...
]

但是我想在反序列化包含此数组的对象的过程中使用TypeAdapter。需要明确的是,这是我开始进行Gson反序列化的方式:

new GsonBuilder()
    .registerTypeAdapter(new TypeToken<MyObject>() {}.getType(), new MyTypeAdapter())
    .create()
    .fromJson(inputJson, MyObject[].class);

这是MyTypeAdapter

class MyTypeAdapter : TypeAdapter<MyObject> {
    private val type = object : TypeToken<MyObject>() {}.type

    override fun write(out: JsonWriter, myObject: MyObject) {
        Gson().toJson(myObject, type, out))
    }

    override fun read(in: JsonReader): MyObject {
        Log.d("MyTypeAdapter", "Deserialization via custom TypeAdapter")
        val objByReflection = new Gson().fromJson(in, type)
        return MyObject(objByReflection.id, objByReflection.name, objByReflection.description, objByReflection.others)
    }
}

但是,我发现TypeAdapter没有用于反序列化;设置断点不会发现它被命中,并且我也没有日志输出。

这是因为实际上我正在反序列化MyObject数组吗?什么是补救此问题的好方法?

谢谢!

0 个答案:

没有答案