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

 在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等

Java代码   收藏代码
  1. public class Student implements java.io.Serializable{  
  2.   
  3.     /**  
  4.     * @Fields serialVersionUID : TODO 
  5.     */   
  6.     private static final long serialVersionUID = -1943961352036134112L;  
  7.     private String sname;  
  8.     private Integer age;  
  9.     public String getSname() {  
  10.         return sname;  
  11.     }  
  12.     public void setSname(String sname) {  
  13.         this.sname = sname;  
  14.     }  
  15.     public Integer getAge() {  
  16.         return age;  
  17.     }  
  18.     public void setAge(Integer age) {  
  19.         this.age = age;  
  20.     }  
  21.       
  22. }  

 

  由字符串转java bean时可以使用以下方法:

 

Java代码   收藏代码
  1. JSONObject jobj = JSONObject.fromObject(str);  
  2. 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代码   收藏代码
  1. import java.util.List;  
  2. /** 
  3.  *  
  4. * <P>Tiltle: AnalysisModel.java </P> 
  5. * <P>Description:模型类  </P> 
  6. * @author biyutong 
  7. * @date Jun 11, 2012 9:37:54 AM  
  8. * @version:V1.0 
  9.  */  
  10. public class AnalysisModel implements java.io.Serializable{  
  11.   
  12.     /** 
  13.      * 固定条件 
  14.      */  
  15.     private List<Condition> regularCondtionList;//  
  16.     /** 
  17.      * 动态条件 
  18.      */  
  19.     private List<ConditionField> dynamicConFieldList;  
  20.     /** 
  21.      * 结果 
  22.      */  
  23.     private List<ResultField> resultField;  
  24.     /** 
  25.      * 获取前多少条数据 
  26.      */  
  27.     private Integer topnum;  
  28.     /** 
  29.      * 顺序还是随机 
  30.      */  
  31.     private String sortFlag;  
  32.     /** 
  33.      * 备注 
  34.      */  
  35.     private String remark;  
  36.     /** 
  37.      * 模型名称 
  38.      */  
  39.     private String modelName;  
  40.     /** 
  41.      * 对应的xml文件名称 
  42.      */  
  43.     private String fileName;  
  44.     public List<Condition> getRegularCondtionList() {  
  45.         return regularCondtionList;  
  46.     }  
  47.     public void setRegularCondtionList(List<Condition> regularCondtionList) {  
  48.         this.regularCondtionList = regularCondtionList;  
  49.     }  
  50.     public List<ConditionField> getDynamicConFieldList() {  
  51.         return dynamicConFieldList;  
  52.     }  
  53.     public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {  
  54.         this.dynamicConFieldList = dynamicConFieldList;  
  55.     }  
  56.     public Integer getTopnum() {  
  57.         return topnum;  
  58.     }  
  59.     public void setTopnum(Integer topnum) {  
  60.         this.topnum = topnum;  
  61.     }  
  62.     public String getSortFlag() {  
  63.         return sortFlag;  
  64.     }  
  65.     public void setSortFlag(String sortFlag) {  
  66.         this.sortFlag = sortFlag;  
  67.     }  
  68.     public String getRemark() {  
  69.         return remark;  
  70.     }  
  71.     public void setRemark(String remark) {  
  72.         this.remark = remark;  
  73.     }  
  74.   
  75.       
  76.     public String getModelName() {  
  77.         return modelName;  
  78.     }  
  79.     public void setModelName(String modelName) {  
  80.         this.modelName = modelName;  
  81.     }  
  82.     public List<ResultField> getResultField() {  
  83.         return resultField;  
  84.     }  
  85.     public void setResultField(List<ResultField> resultField) {  
  86.         this.resultField = resultField;  
  87.     }  
  88.     public String getFileName() {  
  89.         return fileName;  
  90.     }  
  91.     public void setFileName(String fileName) {  
  92.         this.fileName = fileName;  
  93.     }  
  94.       
  95. }  

 在转化的时候需要这样来写:

 

Java代码   收藏代码
  1. Map<String, Class> classMap = new HashMap<String, Class>();  
  2.   //注意key regularCondtionList 应与bean中的元素名一致
  3. classMap.put("regularCondtionList", Condition.class);  
  4.   
  5. classMap.put("dynamicConFieldList", ConditionField.class);  
  6.   
  7. classMap.put("resultField", ResultField.class);  
  8.   
  9. 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、付费专栏及课程。

余额充值