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.     */   
  5.     private static final long serialVersionUID = -1943961352036134112L;  
  6.     private String sname;  
  7.     private Integer age;  
  8.     public String getSname() {  
  9.         return sname;  
  10.     }  
  11.     public void setSname(String sname) {  
  12.         this.sname = sname;  
  13.     }  
  14.     public Integer getAge() {  
  15.         return age;  
  16.     }  
  17.     public void setAge(Integer age) {  
  18.         this.age = age;  
  19.     }  
  20.       
  21. }  

 

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

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

 

Java代码  收藏代码

  1. Map<String, Class> classMap = new HashMap<String, Class>();  
  2.   //注意key regularCondtionList 应与bean中的元素名一致
  3. classMap.put("regularCondtionList", Condition.class);  
  4. classMap.put("dynamicConFieldList", ConditionField.class);   
  5. classMap.put("resultField", ResultField.class);  
  6. AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);  
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值