【问题标题】:Java gson generic array/list deserializationJava gson 泛型数组/列表反序列化
【发布时间】:2012-03-09 13:52:50
【问题描述】:

我正在尝试使用 Gson 反序列化一个通用列表。 我能够反序列化以下 JSON:

[{"updated_at":"2012-03-09T11:13:31Z","id":1,"title":"Moda","position":0,"short_name":"Md"},
{"updated_at":"2012-03-09T11:13:40Z","id":2,"title":"Sissi","position":1,"short_name":"SI"},
{"updated_at":"2012-03-09T11:13:47Z","id":3,"title":"Levis","position":2,"short_name":"LV"},
{"updated_at":"2012-03-09T11:14:03Z","id":4,"title":"Dolce&Gabanna","position":3,"short_name":"DG"}]

使用以下代码:

T[] array = (T[])java.lang.reflect.Array.newInstance(p_class, 0);
gson.fromJson(content, array.getClass());

但是现在,我有以下 JSON,我不知道如何用 gson 反序列化:

[{"brand":{"updated_at":"2012-03-09T11:13:31Z","id":1,"title":"Moda","position":0,"short_name":"Md"}},
{"brand":{"updated_at":"2012-03-09T11:13:40Z","id":2,"title":"Sissi","position":1,"short_name":"SI"}},
{"brand":{"updated_at":"2012-03-09T11:13:47Z","id":3,"title":"Levis","position":2,"short_name":"LV"}},
{"brand":{"updated_at":"2012-03-09T11:14:03Z","id":4,"title":"Dolce&Gabanna","position":3,"short_name":"DG"}}]

感谢您的帮助!

【问题讨论】:

  • 奇怪的是,使用相同的技术创建了 4 Brand 模型,但它们的所有属性都是空的
  • 你的代码中的p_class是什么?
  • p_class 是一个简单的 Class 对象如:Brand.class

标签: java android json deserialization gson


【解决方案1】:

您需要创建一个新类,它有一个名为 brand 的对象,并且是 p_class 类型。然后像以前一样在你的新类上使用 gson,它应该返回一个新类的数组。例如:

class Brand{
    private p_class brand;

    public p_class getBrand(){
        return brand;
    }
}

对于 gson:

List<Brand> brands = (List<Brand>) gson.fromJson(content, new TypeToken<List<Brand>>(){}.getType());

另一种方法是使用 android 框架中可用的普通 json 对象:

    JSONArray ar = new JSONArray(content);
    for(int i=0; i<ar.length(); i++){
        JSONObject obj = ar.getJSONObject(i);

        //here is your desired object
        p_class p = gson.fromJson(obj.getJSONObject("brand").toString(), p_class.class);
    }

【讨论】:

  • 有没有一种方法可以通用地自动创建这些类?我需要将此代码保留为通用代码
  • 您的第一个解决方案不能一概而论,但您的第二个解决方案可以,所以这绝对是一个很好的答案,谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
相关资源
最近更新 更多