2012-03-09 3 views
0

Я пытаюсь десериализовать общий список, используя Gson. Я могу десериализации следующий JSON:Java gson generic array/list deserialization

[{"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"}}] 

Благодарим за помощь!

+0

странного дело в том, что с помощью тот же метод создает модель 4 Бренда, но все их атрибуты равны нулю – seriakillaz

+0

Что такое 'p_class' в вашем коде? – curioustechizen

+0

p_class - это простой объект класса, такой как: Brand.class – seriakillaz

ответ

4

Вам нужно создать новый класс, который имеет объект с именем бренд и является типом 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()); 

другой способ будет делать с обычной 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); 
    } 
+0

Есть ли способ, чтобы я мог создавать эти классы в целом и автоматически? Мне нужно зарезервировать этот код как общий – seriakillaz

+0

Я только что обновил свой ответ. второй вариант - пример – waqaslam

+0

Ваше первое решение не может быть обобщено, но ваш второй может быть, так что это определенно хороший ответ, спасибо! – seriakillaz