因为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
数组吗?什么是补救此问题的好方法?
谢谢!