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