3

我有这些课程

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 的错误吗?或者我做的事情不正确?

爱德华。

4

1 回答 1

2

您必须提供属性类的完整定义。您的示例应如下所示:

manager.apps = gson.fromJson(json, new TypeToken<List<Application>>() {}.getType());
于 2013-06-06T14:49:14.510 回答