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

时间: 2024-08-14 17:39:04

JSON字符串转JavaBean,net.sf.ezmorph.bean.MorphDynaBean cannot be cast to ……的相关文章

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

json教程系列(5)-json错误解析net.sf.ezmorph.bean.MorphDynaBean cannot be cast to

在平常的开发中,我们经常会遇到JSONObject和Bean的互换,JSONArray和List<Bean>的互换,具体的操作可以看下面的小例子. 1 public class Test 2 { 3 public static void main(String args[]) 4 { 5 User temp = new User(); 6 temp.setUsername("root"); 7 temp.setPassword("root"); 8 //

Java 对象,数组 与 JSON 字符串 相互转化

当 Java 对象中包含 数组集合对象时,将 JSON 字符串转成此对象. public class Cart{} public class MemberCoupon{} public class CartGroup { private List<Cart> carts = new ArrayList<Cart>(); // 购物车列表 private List<MemberCoupon> coupons = new ArrayList<MemberCoupon&

FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换

fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换. JSONObject:fastJson提供的json对象. JSONArray:fastJson提供json数组对象. 我们可以把JSONObject当成一个Map<String,Object>来看,只是JSONObject提供了更为丰富便捷的方法,方便我们对于对象属性的操作.我们看一下源码. 同样我们可以把JSONArra

FastJson学习:JSON格式字符串、JSON对象及JavaBean之间的相互转换

当前台需要传送一系列相似数据到后端时,可以考虑将其组装成json数组对象,然后转化为json形式的字符串传输到后台 例如: nodes = $('#PmPbsSelect_tree').tree('getChecked'); var data=[]; for(var i=0;i<nodes.length;i++){ if(!isParentCheck(nodes[i],nodes)){ data.push({"id":nodes[i].id, "pid":no

java将其他数据格式转换成json字符串格式

package com.wangbo.util; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.math.BigDecimal; import java.math.BigInteger; import java.util.HashMap; import java.util.List; import

FastJson JSON对象及JavaBean之间的相互转换

示例1:JSON格式字符串与javaBean之间的转换. json字符串与javaBean之间的转换推荐使用 TypeReference<T> 这个类,使用泛型可以更加清晰 /** * json字符串-简单对象与JavaBean_obj之间的转换 */ public static void testJSONStrToJavaBeanObj(){ Student student = JSON.parseObject(JSON_OBJ_STR, new TypeReference<Stude

SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换

SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换 场景一:表单中的日期字符串和JavaBean的Date类型的转换 在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换, 例如,如下代码S_ROLE_QO这个bean中包含有Date类型属性,不处理就拿不到值. /** * 分页取角色列表 * @param s_ROLE_QO 角色查询条件 * @return */ @RequestMapping(value = "/

Bean、List、Map、Array、String与JSON字符串的相互转换

import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map;