解:
您正在使用更多的类来解析JSON响应!您可以删除班级
ListTeleServices,
TeleService并仅保留
Record班级。
Gson gson = new Gson();Type mapOfMapsType = new TypeToken<Map<String, Map<String, Record>>>() {}.getType();Map<String, Map<String, Record>> map = gson.fromJson(br, mapOfMapsType);最后,为了获得方法名称,您必须使用:
String methodName = map.get("Teleservice_2").get("Record_33").getMethodName();说明:
当您使用类
ListTeleServices在此处解析JSON时:
ListTeleServices teleservices = gson.fromJson(br, ListTeleServices.class);
Gson所做的是分析该类
ListTeleServices并将其与JSON响应进行比较,因此它说:
您传递了一个类
ListTeleServices.class
,并且JSON响应从一个对象开始{}…到目前为止,一切正常!然后,它继续解析JSON,并:
- 在该类中,
ListTeleServices
它找到一个属性listTeleServices
,该属性是某个对象(暂时不在乎类型)。 - 然而,在JSON响应它找到三个要素
"Teleservice_1"
,"Teleservice_2"
并且"Teleservice_3"
,但是他们都没有相同的名称listTeleServices
,所以GSON跳过所有这些价值和受让人null
的属性listTeleServices
…
- 在该类中,
请记住,Gson需要JSON响应中的名称与您用来解析响应的类中的名称相同。
另一方面,如果您直接使用
Map<String, Map<String, Record>>,则Gson请参见:
您传递了的类型
Map<String, Map<String, Record>>
,并且JSON响应以一个对象开始{}…到目前为止,一切正常!(记住aMap
只是一个对象)然后,它继续解析JSON,并:
- 在
Map<String, Map<String, Record>>
它发现必须有一些对键(串)和价值(一些对象)。 - 在JSON响应中,它恰好找到了这对字符串
"Teleservice_1"
,"Teleservice_2"
和"Teleservice_3"
和一些对象{},因此它可以使解析愉快。
- 在
PS: 要进一步讲解,请注意您可以在班级中拥有
ListTeleServices以下属性:
private HashMap<String, Record> Teleservice_1;private HashMap<String, Record> Teleservice_2;private HashMap<String, Record> Teleservice_3;
它会很好地工作,但是这样一来,您就无法拥有任意数量的远程服务对象…
顺便说一句,我还意识到了 另一个错误
:在您的
Response类中,属性名称
method_parameters与JSON响应中的字段名称不匹配
method_params。您可以更改属性名称或使用注释:
@SerializedName("method_params")private Object[] method_parameters;


