JSON字符串轉JavaBean,net.sf.ezmorph.bean.MorphDynaBean cannot be cast to ……


在json字符串轉java bean時,一般的對象,可以直接轉,如:一個學生類,屬性有姓名、年齡等

public class Student implements java.io.Serializable{

    /** 
    * @Fields serialVersionUID : TODO
    */ 
    private static final long serialVersionUID = -1943961352036134112L;
    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;
    }
    
}

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

JSONObject jobj = JSONObject.fromObject(str);
Student s = (Student) JSONObject.tobean(jobj,Student.class);

是沒有問題的,但是如果屬性中含有復雜的類型,當其中屬性有類似List , Map ,ArrayList、自定義的類型,如List<Teacher> teachers, 就不可以了。 會報錯:MorphDynaBean cannot be cast to con.test……

在JSONObject.toBean的時候如果轉換的類中有集合,可以先定義Map<String, Class> classMap = new HashMap<String, Class>();在classMap中put你要轉換的類中的集合名,像:classMap.put("teachers", Teacher.class);然后在toBean()的時候把參數加上, 像:Student student=(Student) JSONObject.toBean(str, Student.class, classMap);

 

比如我定義了如下類型:

import java.util.List;
/**
 * 
* <P>Tiltle: AnalysisModel.java </P>
* <P>Description:模型類  </P>
* @author biyutong
* @date Jun 11, 2012 9:37:54 AM 
* @version:V1.0
 */
public class AnalysisModel implements java.io.Serializable{

    /**
     * 固定條件
     */
    private List<Condition> regularCondtionList;//
    /**
     * 動態條件
     */
    private List<ConditionField> dynamicConFieldList;
    /**
     * 結果
     */
    private List<ResultField> resultField;
    /**
     * 獲取前多少條數據
     */
    private Integer topnum;
    /**
     * 順序還是隨機
     */
    private String sortFlag;
    /**
     * 備注
     */
    private String remark;
    /**
     * 模型名稱
     */
    private String modelName;
    /**
     * 對應的xml文件名稱
     */
    private String fileName;
    public List<Condition> getRegularCondtionList() {
        return regularCondtionList;
    }
    public void setRegularCondtionList(List<Condition> regularCondtionList) {
        this.regularCondtionList = regularCondtionList;
    }
    public List<ConditionField> getDynamicConFieldList() {
        return dynamicConFieldList;
    }
    public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {
        this.dynamicConFieldList = dynamicConFieldList;
    }
    public Integer getTopnum() {
        return topnum;
    }
    public void setTopnum(Integer topnum) {
        this.topnum = topnum;
    }
    public String getSortFlag() {
        return sortFlag;
    }
    public void setSortFlag(String sortFlag) {
        this.sortFlag = sortFlag;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }

    
    public String getModelName() {
        return modelName;
    }
    public void setModelName(String modelName) {
        this.modelName = modelName;
    }
    public List<ResultField> getResultField() {
        return resultField;
    }
    public void setResultField(List<ResultField> resultField) {
        this.resultField = resultField;
    }
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    
}

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

Map<String, Class> classMap = new HashMap<String, Class>();

classMap.put("regularCondtionList", Condition.class);

classMap.put("dynamicConFieldList", ConditionField.class);

classMap.put("resultField", ResultField.class);

AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);

 

from: http://biyutong.iteye.com/blog/1566708


免責聲明!

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



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