我有一个Java Web服务响应作为一个对象,它有一个整数作为键,自定义对象作为值的映射。自定义对象又包含另一个自定义对象的列表。当我尝试反序列化响应时,除了自定义对象列表之外,所有内容都被反序列化。列表是空的。
我的代码:
String dataFromServer ="";
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
Type listType = new TypeToken<OuterCustomResponse>() {}.getType();
OuterCustomResponse respo = gson.fromJson(data, Books.class);
OuterCustomResponse
具有以下结构:
OuterCustomResponse {
private int age;
private String name;
private Map<Integer,CutomObj1> obj;
}
CtomObj1 {
List<CustomObj2> customObj2;
}
问题是响应包含年龄,名称和地图对象,但在地图对象中,列表为空。我尝试通过实现JSON反序列化器为CustomObj2
编写反序列化器,但没有用。任何帮助表示赞赏。
答案 0 :(得分:0)
使用一些示例JSON会更好。 (我猜你也有错字CtomObj1 {...
)
也许customObj2
不是一个对象而不是一些原始类型(?不太可能)或者你的列表是一个关联的数组(=对象)因此你得到了一个复杂的对象而不是列表/数组?
如果它是一个关联的数组(〜对象),看起来就像一个列表:
OuterCustomResponse {
age:3,
name:"foo",
map:{
1:{
listitem1a:{...},
listitem2a:{...}},
2:{},
...
}}
您可能必须从这三个选项中进行选择以进行反复序列化:https://sites.google.com/site/gson/gson-user-guide#TOC-Serializing-and-Deserializing-Collection-with-Objects-of-Arbitrary-Types
如果它确实是一个列表((索引)数组):
OuterCustomResponse {
age:3,
name:"foo",
map:{
1:[
{ listitem1propertyA: "bar" },
{ listitem2propertyB: "baz" }
],
2:[],
...
}}
列表项可以是相同或不同的类型。
如果它们属于同一类型,那么如果listitem1propertyA
正确映射到某个CustomObj2.listitem1propertyA
字段,则您的方法应该有效。
如果它们不是同一类型(或者可能只有一个特殊对象不匹配 - 我不知道这是否会导致空列表),那么您必须从上述选项中进行选择。