我目前正在尝试使用 Flexjson 反序列化 JSON 字符串并将其映射到我的 Android 应用程序的对象模型。该应用程序是一种具有多个供应商的库,其中可以包含一些目录,其中包含更多目录和文档。json 是从我没有影响的 Web 服务中获取的,看起来像这样:
{
"library":{
"vendor":[
{
"id":146,
"title":"Vendor1",
"catalog":[
{
"id":847,
"document":[
{
"id":1628,
"title":"Document",
...
},
{
...
}
],
"title":"Catalog ",
},
{
...
}
]
},
{
...
}
]
}
}
因此,每个供应商、目录、文档都由 JSONObject 表示,所有子目录和文档都在 JSONArray 中。到目前为止,Flexjson 和以下反序列化代码一切正常:
LibraryResponse response = new JSONDeserializer<LibraryResponse>()
.use(Timestamp.class, new TimestampObjectFactory())
.deserialize(getLocalLibrary(), LibraryResponse.class);
return response.library;
我确实有一个具有List<Vendor>
. 每个供应商都有一个List<Catalog>
和一个List<Document>
。
但不幸的是,如果目录仅包含单个文档或目录仅包含一个目录,则 Web 服务会将 JSONArrays 绑定到简单的 JSONObjects。所以这种情况下的 json 看起来像这样:
"document":
{
"id":1628,
"title":"Document",
...
}
现在 Flexjson 不知道如何反序列化,我最终得到一个 library.vendorX.getDocument() 是 aList<HashMap>
而不是List<Document>
. 一个想法是明确告诉 Flexjson 如何处理这种情况,但我不知道从哪里开始。另一种方法是手动解析初始 json 并将此类 JSONObjects 替换为适当的 JSONArray。但我认为这种方式并不好走,因为图书馆可能很深。
我希望你能在这里提供一些指导。