在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等 W. a) n5 K7 X; K但是如果存在List集合就会出新net.sf.ezmorph.bean.MorphDynaBean cannot be cast to 错误。 2 I5 F5 W4 h G2 z解决方法:
public class Student implements java.io.Serializable{! u% p, f' C$ G% m+ \
7 B; \3 D, f1 q% ^: f
/** * Q: `2 X: u$ B* k T# ?& E
* @Fields serialVersionUID : TODO ' G% t, p; Y* Q, R: h1 h
*/ : R9 E' t a, w: a% n3 ~
private static final long serialVersionUID = -1943961352036134112L; 1 r& s, U5 s3 E8 [
private String sname; 7 n9 m( j4 Q* s1 p/ w0 b. t$ H
private Integer age; . B: ~8 Z' y5 J/ D2 t; N
public String getSname() {$ [- r* s. a0 V8 X. a4 t
return sname; ) s$ L& N+ }1 y3 A
} 4 O0 D. N8 Q6 y9 U4 @
public void setSname(String sname) {/ v i& V. G4 |( ^% ]# @* n
this.sname = sname;( ^% \9 K8 }4 _6 h# F
} " @( x4 N( k1 e$ d, F4 B
public Integer getAge() {+ B; B5 v8 y9 E' t: ~
return age; 9 d5 G2 ^' z3 s. w3 x3 o' n
} : p; ?8 l$ C/ s0 B; m" j
public void setAge(Integer age) { a6 A8 ^# m! U) z' t2 g$ S
this.age = age; W& K ]# W7 x B! V, V
} # J+ C& f" t% O& Q- Y
7 C z% c5 i5 @. n5 L0 M# P
}; e5 l4 m! y: P& c( n1 n
复制代码
由字符串转java bean时可以使用以下方法: / b3 B' |& T q/ x6 d0 e2 \0 Q0 \2 d# P( w9 w
JSONObject jobj = JSONObject.fromObject(str); 8 M: d, l: d; L8 d1 l# R+ x- D' l
Student s = (Student) JSONObject.tobean(jobj,Student.class);
复制代码
6 ?% f5 c# Y H9 L4 B S7 m w
是没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似List , Map ,ArrayList、自定义的类型,如List<Teacher> teachers, 就不可以了。 会报错:MorphDynaBean cannot be cast to con.test…… 5 Z4 [2 n; K/ l8 Z! H 在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); . M s& H5 G% h& a' N7 u- ^5 m- x / b. T& I( K- m( q% |比如我定义了如下类型: ) V4 r4 ]6 ^, |2 \7 K* {' z9 B