设定: - Android - 改造2 - Gson
我的服务器json看起来像这样:
{
"myList1":
{
"1": (<- variable number)
{
"id":"1","name":"user123"
},
"2"{},...},
"myList2":
{
"299": (<- variable number)
{
"id":"20","name":"user42"
},
"300":
{},...}
}
第一个节点:“myList1”和“myList2”已修复。
然后第二个节点包含一个变量号
第二个节点用户对象。
- &GT;如何使用gson定义第二个列表的响应?
- &GT;条目的数量和数量是可变的
我的响应映射看起来像:
public class ResponeDef {
@Gson.Named("myList1")
ResponeListDef list1;
@Gson.Named("myList2")
ResponeListDef list1;
}
public class ResponeListDef {
@Gson.Named("??")
ResponeListEntryDef entry1
@Gson.Named("??")
ResponeListEntryDef entry2;
}
public class ResponeListEntryDef {
@Gson.Named("id")
int id;
@Gson.Named("name")
String userName;
}
答案 0 :(得分:1)
如果您可以控制API,最简单的解决方案是将响应格式转换为
{
"myList1":
[
{
"id":"1","name":"user123"
},
{},...],
"myList2":
[
{
"id":"20","name":"user42"
},
{},...]
}
如果不这样做,则可以使用自定义TypeAdapter解析它。
将您的回复def更改为
public class ResponeDef {
@Gson.Named("myList1")
List<ResponseListEntryDef> list1;
@Gson.Named("myList2")
List<ResponseListEntryDef> list1;
}
public class ResponeListEntryDef {
@Gson.Named("id")
int id;
@Gson.Named("name")
String userName;
}
并创建自定义TypeAdapter为
class CustomAdapter extends TypeAdapter<ResponseDef> {
@Override
public void write(JsonWriter out, ResponseDef value) throws IOException {
// loop over lists and write them to out
}
@Override
public ResponseDef read(JsonReader in) throws IOException {
// loop over items in jsonReader and initialize the lists
return responseDef;
}
}
然后,您可以使用
向Gson注册类型适配器Gson gson = new GsonBuilder()
.registerTypeAdapter(ResponseDef.class, new CustomAdapter())
.create();