我无法理解为什么在下面的示例中,自定义类列表(response.results 和 results)充满了 LinkedHashMap。我预计在解析 JSON 输入流后,列表将充满自定义类,其类成员包含直接来自 JSON 的数据。相反,列表返回时包含 LinkedHashMap,即使它们是 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;
}
}
JSON format除了它自己的原始类型之外,不包含任何类型信息。它是一种基于文本的格式,数组和对象分别映射到每种编程语言中存在的有序列表和有序键值对列表的任何概念。
因此,LinkedHashMap
是 Java 中 JSON 对象的自然表示。因此,这是大多数 JSON 反序列化器默认输出的内容。
要检索我使用过的所有 JSON 实现中的自定义对象,您需要提供 a custom deserializer class ,或对标准解串器的输出进行后处理。有时甚至可能需要自定义序列化程序通过在 JSON 流中插入一些类型信息来协助解决不明确的情况。
我是一名优秀的程序员,十分优秀!