我无法理解为什么在下面的示例中,使用LinkedHashMaps填充了customclass列表(response.results和results)。我希望在解析JSON输入流之后,这些列表只是充满了自定义类,其类成员包含数据,直接来自JSON。相反,列表返回包含LinkedHashMaps,即使它们是类型Customclass。
有人可以解释一下吗?
Gson gson = new Gson();
Reader reader = new InputStreamReader(inputStream);
PlacesList response = gson.fromJson(reader, PlacesList.class);
List<Place> results = response.results;
使用的自定义类:
public class PlacesList implements Serializable {
@Key
public String status;
@Key
public String error_message;
@Key
public List<Place> results;
}
&安培;
public class Place implements Serializable {
@Key
public String id;
@Key
public String name;
@Key
public String reference;
@Key
public String icon;
@Key
public String vicinity;
@Key
public Geometry geometry;
@Key
public String formatted_address;
@Key
public String formatted_phone_number;
@Override
public String toString() {
return name + " - " + id + " - " + reference;
}
public static class Geometry implements Serializable
{
@Key
public Location location;
}
public static class Location implements Serializable
{
@Key
public double lat;
@Key
public double lng;
}
}
答案 0 :(得分:1)
JSON format除了自己的原始类型外,不包含任何类型信息。它是一种基于文本的格式,数组和对象分别映射到有序列表的任何概念,并且每种编程语言都存在有序的键值对列表。
因此LinkedHashMap
是Java中JSON对象的自然表示。因此,它是大多数JSON反序列化器默认输出的内容。
要在我使用的所有JSON实现中检索自定义对象,您需要提供a custom deserializer class,或者对标准反序列化器的输出进行后处理。有时,自定义序列化程序甚至可能需要通过在JSON流中插入某些类型信息来帮助解决不明确的情况。