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{
    private static final long serialVersionUID = 1L;
    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;
    }
}

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

String str = "[{\"sname\":\"admin\",\"age\":20}]";    ////接收{}对象,此处接收数组对象会有异常,故需要解决
        if (str.indexOf("[") != -1) {
            str = str.replace("[", "");
        }
        if (str.indexOf("]") != -1) {
            str = str.replace("]", "");
        }
JSONObject jobj = JSONObject.fromObject(str);
Student s = (Student) JSONObject.toBean(jobj,Student.class);

这样没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似List, Map,ArrayList就不可以了。 会报错:MorphDynaBean cannot be cast to ******。在JSONObject.toBean的时候如果转换的类中有集合,可以先定义Map classMap = new HashMap();在classMap中put你要转换的类中的集合名,比如:classMap.put("teachers", Teacher.class);然后在toBean()的时候把参数加上,例如:Student student=(Student) JSONObject.toBean(str, Student.class, classMap);
下面举出一个小小的例子:

public class Student implements java.io.Serializable{
    private static final long serialVersionUID = 1L;
    private String sname;
    private Integer age;
    private List < String > courses;
    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;
    }
    public List getCourses()
    {
        return courses;
    }
    public void setCourses(List courses)
    {
        this.courses = courses;
    }
}

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

Map classMap = new HashMap();
classMap.put("courses",String.class);
Student student =( Student) JSONObject.toBean(str, Student.class, classMap);
时间: 2024-11-06 15:53:07

json学习系列(5)-json错误解析net.sf.ezmorph.bean.MorphDynaBean cannot be cast to的相关文章

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 //

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

json学习系列(8)JSON与JAVA数据的相互转换实例

一.完整案例 先定义一个java实体对象,如下: package com.pcitc.json.cnblog; /** * SimInfo实体对象 * * @Description * @author admin * @created 2015年6月30日 上午10:23:21 * @version * @history * @see */ public class SimInfo { private String addTime; private String iccid; private i

Spring学习系列之——第三章:Spring中Bean的配置(一)

Spring的配置形式有两种:基于XML配置和基于注解配置. Bean的配置方式有以下几种: 通过全类名,即通过反射的方式: 通过工厂方法,有静态工厂方法和实例工厂方法: 通过FactoryBean配置: 通过XML文件配置bean 本篇文章将按照下面的目录来说明基于XML的方式配置bean JavaBean的创建 通过XML配置的方式来配置bean XMLbean的配置: spring的依赖注入的方式 属性注入 构造器注入 工厂方法注入(很少使用) 测试方法 IoC容器的实例化: Applic

json学习系列(7)JSONBuilder的用法

JSONBuilder可以向文件中写入写入json字符串.如下面的例子: public class Test { public static void main(String args[]) throws IOException { File f = new File("d:" + File.separator + "test.txt"); FileWriter fw = new FileWriter(f); JSONBuilder builder = new JS

json学习系列(6)JSONObject和JSONArray是JDK的集合部分延伸

我一直觉得JSONObject和JSONArray是JDK集合部分的延伸,它们与JDK的List和Map一脉相承.通过研究JSONObject和JSONArray的结构,我们顺便也复习一下JDK的内容. 首先看一下JSONObject和JSONArray 的结构: final class JSONObject extends AbstractJSON implements JSON, Map, Comparable final class JSONArray extends AbstractJS

json学习系列(3)-JSONObject的过滤设置

我们通常对一个json串和java对象进行互转时,经常会有选择性的过滤掉一些属性值.例如下面的实体类: package com.pcitc.json; /** * Person实体类 * * @Description * @author admin * @created 2015年6月29日 下午4:08:40 * @version * @history * @see */ public class Person { private String name; private String add

json学习系列(1)-使用json所要用到的jar包下载

内容来源于互联网. json是个非常重要的数据结构,在web开发中应用十分广泛.每个开发者都应该好好的去研究一下json的底层实现.在使用json之前首先要明白需要哪些jar文件,初次使用的时候很容易犯错,如果没有加入正确的jar包,会报各种各样的问题.在使用json之前需要准备下面的六个jar 包: commons-lang-1.0.4.jar commons-collections-2.1.jar commons-beanutils-1.8.0.jar json-lib-2.4.jar ez

json学习系列(2)-生成JSONObject的方法

生成JSONObject一般有两种方式,通过javabean或者map类型来生成.如下面的例子: 先定义一个User实体类: package com.pcitc.json; /** * 用户实体类 * * @Description * @author admin * @created 2015年6月29日 下午3:43:15 * @version * @history * @see */ public class User { public String username; public Str