List <customclass>如何填充LinkedHashMaps,而不是Customclass的实例?</customclass>

时间:2014-03-25 01:00:21

标签: java json list linkedhashmap

我无法理解为什么在下面的示例中,使用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;
    }

}

1 个答案:

答案 0 :(得分:1)

JSON format除了自己的原始类型外,不包含任何类型信息。它是一种基于文本的格式,数组和对象分别映射到有序列表的任何概念,并且每种编程语言都存在有序的键值对列表。

因此LinkedHashMap是Java中JSON对象的自然表示。因此,它是大多数JSON反序列化器默认输出的内容。

要在我使用的所有JSON实现中检索自定义对象,您需要提供a custom deserializer class,或者对标准反序列化器的输出进行后处理。有时,自定义序列化程序甚至可能需要通过在JSON流中插入某些类型信息来帮助解决不明确的情况。