2013-06-06 3 views
3

У меня есть эти классыНеформат в десериализации коллекции с gson 2

public class Application { 
    public String name; 
    public String ico; 
    public List<MenuStruct> menu =new ArrayList<MenuStruct>(); 
    //Constructor 
    public Application() { } 
} 
public class MenuStruct { 
    public String id; 
    public String type;  
    public String parent; 
    public String name;  
    public String secId; 
    //Constructor 
    public MenuStruct() {} 
} 

Если я пытаюсь десериализации коллекцию непосредственно таким образом:

ApplicationManager apm= new ApplicationManager(); 
s="[ {\"name\":\"reg_salida\" , \"ico\":\"document-open-2-32x32.ico\" }]"; 
apm.apps=(new Gson()).fromJson(s,apm.apps.getClass()); 
for (Application ap:apm.apps){ 
    System.out.println(ap.name); //gets error here 
} 

Я получаю java.lang.ClassCastException.

Но если я попытаюсь десериализовать свой класс приложений ApplicationManager, это не подведет.

s="{ \"apps\": [ {\"name\":\"reg_salida\" , \"ico\":\"document-open-2-32x32.ico\" }]}"; 
ApplicationManager apm=(new Gson()).fromJson(s,ApplicationManager.class); 
for (Application ap:apm.apps){ 
    System.out.println(ap.name); // now no errors here! and shows reg_salida 
} 

Является ли это ошибкой gson 2.2.4? или, может быть, я что-то делаю неправильно?

Eduard.

ответ

2

Вы должны предоставить полное определение класса собственности. Ваш пример должен выглядеть так:

manager.apps = gson.fromJson(json, new TypeToken<List<Application>>() {}.getType()); 
+0

Спасибо, что работает отлично! –

+0

Я рад, что смогу вам помочь. Не могли бы вы проверить мой ответ как полезный и голосующий. –

+0

Извините, я не могу голосовать за мой низкий уровень репутации! –

Смежные вопросы