JSON字符串转javabean,报net.sf.ezmorph.bean.MorphDynaBean cannot be cast to.....

 在json字符串转Java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等
Java代码  收藏代码
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时可以使用以下方法:
 
Java代码  收藏代码
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);
 
比如我定义了如下类型:
 
Java代码  收藏代码
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;  
    }  
      
}  
 在转化的时候需要这样来写:
 
Java代码  收藏代码
Map<String, Class> classMap = new HashMap<String, Class>();  
  //注意key regularCondtionList 应与bean中的元素名一致
classMap.put("regularCondtionList", Condition.class);  
  
classMap.put("dynamicConFieldList", ConditionField.class);  
  
classMap.put("resultField", ResultField.class);  
  
AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值