【问题标题】:How can List<Customclass> be filled with LinkedHashMaps, rather then instances of Customclass?List<Customclass> 如何填充 LinkedHashMap,而不是 Customclass 的实例?
【发布时间】:2014-03-25 01:00:20
【问题描述】:

我无法理解为什么在下面的示例中,customclass 列表(response.results 和 results)充满了 LinkedHashMap。我希望在解析 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;
    }

}

【问题讨论】:

    标签: java json list linkedhashmap


    【解决方案1】:

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

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

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

    【讨论】:

    • 啊,好吧,所以自定义对象仍然引用了 JSON 对象。 customclass的classmembers也是对json的引用,还是上例中填写的那些?
    • @ThomQ:我不确定我是否理解你的问题,但是通过在你的类中注释字段,你基本上可以自定义 JSON 序列化器的行为,让它知道要序列化什么。
    • 啊,是的,这就是我的意思。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多