json學習系列(5)-json錯誤解析net.sf.ezmorph.bean.MorphDynaBean cannot be cast to


最近在使用json的時候,報了下面的錯誤:
net.sf.ezmorph.bean.MorphDynaBean cannot be cast to java.lang.String
這種錯誤非常常見,因為json轉化為javabean的時候,默認為MorphDynaBean類的。如下面的例子:
在json字符串轉javabean時,一般的對象,可以直接轉,如:一個學生類,屬性有姓名、年齡等。

public class Student implements java.io.Serializable{
    private static final long serialVersionUID = 1L;
    private String sname;
    private Integer age;
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }    
}

由字符串轉javabean時可以使用以下方法:

String str = "[{\"sname\":\"admin\",\"age\":20}]";
    ////接收{}對象,此處接收數組對象會有異常,故需要解決
if (str.indexOf("[") != -1) { str = str.replace("[", ""); } if (str.indexOf("]") != -1) { str = str.replace("]", ""); } JSONObject jobj = JSONObject.fromObject(str); Student s = (Student) JSONObject.toBean(jobj,Student.class);

這樣沒有問題的,但是如果屬性中含有復雜的類型,當其中屬性有類似List, Map,ArrayList就不可以了。 會報錯:MorphDynaBean cannot be cast to ******。在JSONObject.toBean的時候如果轉換的類中有集合,可以先定義Map classMap = new HashMap();在classMap中put你要轉換的類中的集合名,比如:classMap.put("teachers", Teacher.class);然后在toBean()的時候把參數加上,例如:Student student=(Student) JSONObject.toBean(str, Student.class, classMap);
下面舉出一個小小的例子:

public class Student implements java.io.Serializable{
    private static final long serialVersionUID = 1L;
    private String sname;
    private Integer age;
    private List < String > courses;
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public List getCourses()
    {
        return courses;
    }
    public void setCourses(List courses)
    {
        this.courses = courses;
    }    
}

在轉化的時候需要這樣來寫:

Map classMap = new HashMap();
classMap.put("courses",String.class);
Student student =( Student) JSONObject.toBean(str, Student.class, classMap);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM