net.sf.ezmorph.bean.MorphDynaBean cannotbe cast to xxx

net.sf.ezmorph.bean.MorphDynaBean cannotbe cast to xxx

在操作json的数据格式的时候,如果没有指明数据类型,那么只能是基本类型或者是String类型,不能出现复杂数据类型。

for(Map<String, Object> map : datas){

            String gw_id = map.get("GW_ID").toString();

            gw_id =  gw_id.substring(0, 14)+"1"+gw_id.substring(15);

            map.put("GW_ID", gw_id);

            map.put("UPDATE_TIME", new Date().getTime());

            map.put("CREATE_TIME", map.get("CREATE_TIME"));

            map.put("LAST_COLLECT_TIME", map.get("LAST_COLLECT_TIME"));

            Set<String> keys =  map.keySet();

            for(String key:keys){

                if(null == map.get(key)){

                    map.put(key, "");

                }

            }

        }

String jsondata = JSONArray.fromObject(datas).toString();

JSONArray jsonarray = JSONArray.fromObject(jsondata );

 List<Map<String, Object>> objs = (List<Map<String, Object>>)JSONArray.toCollection(jsonarray, Map.class);



在这里,因为得到json字符串的时候用的是 JSONArray.fromObject(collenction),所有,在讲json字符串转换成json对象的时候,也只能用JSONArray.toCollection,并且,一定要带上后面的class参数。



将json字符串转换成对应的json对象以后,在遍历json对象时

for(Map<String, Object> data : objs)

data.get("LAST_COLLECT_NUM")

此时,get()方法得到的是对象,并且是只能转换成基本数据类型或者是String类型的,如果强制转化成复杂的类型,会提示这个错误。

 

 

再如:

Teacher类中,有三个属性。

   private String teaId;  

  

    private String teaName;  

  

    private List<Student> stus;  

 

Teacher teacher_1 = new Teacher("编号1", "教师1", stus);  

JSONObject obj = JSONObject.fromObject(teacher_1); 

这一步,将Teacher 对象转换成json字符串的时候,没有任何的问题。

 

下面,将JSONObject 转换成Teacher 对象,如果,不加后面的class参数,也会报这儿错误。加了后,这一步也正常。

Teacher teacherBean = (Teacher) JSONObject.toBean(obj, Teacher.class);  

 

Student studentBean = teacherBean.getStus().get(0); 

当从teacherBean 对象中取出stus属性的值时候,就会提示:

java.lang.ClassCastException:net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.edu.xukai.Student



用这种方式可以解决:

 map.put("stus", Student.class); 

 Teacher teacherBean = (Teacher) JSONObject.toBean(obj, Teacher.class, map); 

其中map对象是teacherBean对象中各个属性的类型,mapkey是属性每次,value是属性的类型。



JSONArray.toArray(jsonArray, objectClass, classMap)

JSONArray.toList(jsonArray, objectClass, classMap)

也支持这样的方式。

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值