net.sf.ezmorph.bean.MorphDynaBean cannot be cast to

来源:互联网 发布:淘宝详情图片怎么上传 编辑:程序博客网 时间:2024/05/22 11:35
在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等
但是如果存在List集合就会出新net.sf.ezmorph.bean.MorphDynaBean cannot be cast to 错误。. H+ k3 u' W  ?3 S9 ~7 F0 Z
解决方法:
  1. public class Student implements java.io.Serializable{
  2. 6 ~) h( X7 K% I; m& }
  3.         /** 
  4.         * @Fields serialVersionUID : TODO3 Z/ M2 Z) }# S. ?, G. w
  5.         */ 
  6.         private static final long serialVersionUID = -1943961352036134112L;: ?" M+ P3 F7 s  a& I! j
  7.         private String sname;
  8.         private Integer age;
  9.         public String getSname() {# a9 |& C$ T4 o6 e
  10.                 return sname;: [- e% L  s" o. f% K" M; g4 R
  11.         }
  12.         public void setSname(String sname) {
  13.                 this.sname = sname;
  14.         }7 {+ Y: G9 S+ U/ R+ @  D, N) |
  15.         public Integer getAge() {
  16.                 return age;
  17.         }0 ^2 I/ D" h% E; N  `+ A
  18.         public void setAge(Integer age) {
  19.                 this.age = age;
  20.         }
  21.         ; M/ s+ N. S  ~6 b$ H# `- c4 F
  22. }
复制代码
由字符串转java bean时可以使用以下方法:

  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……. }3 }; ?% J3 B9 x8 `
    在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$ q2 q; ?4 Z" t

比如我定义了如下类型:
  1. import java.util.List;% T$ O3 t2 ]1 m4 j1 n
  2. /**' k* J2 D0 c# T' T3 J

  3. * <P>Tiltle: AnalysisModel.java </P>
  4. * <P>Description:模型类  </P>
  5. * @author biyutong  i) x7 Q7 T% b: }
  6. * @date Jun 11, 2012 9:37:54 AM . L" v2 j" d# X$ A$ D
  7. * @version:V1.0
  8. */. F; q- w; J( a% p* O! k
  9. public class AnalysisModel implements java.io.Serializable{
  10. % ?$ m4 U9 }+ Z* \0 B! ^6 Q
  11.         /**
  12.          * 固定条件  p/ a/ r9 j) h3 \0 B5 w5 S
  13.          */' w& s  c! L7 g3 c7 \
  14.         private List<Condition> regularCondtionList;//- j  L9 m6 W2 H/ [6 Z) v6 V
  15.         /**$ @# A1 e) ?* \) x
  16.          * 动态条件  T5 H% p2 H) J  m& E
  17.          */
  18.         private List<ConditionField> dynamicConFieldList;
  19.         /**
  20.          * 结果
  21.          */
  22.         private List<ResultField> resultField;- u5 A- ?$ J6 T
  23.         /**# l) `) B, s3 k2 U" p3 d3 g) q
  24.          * 获取前多少条数据
  25.          */
  26.         private Integer topnum;
  27.         /**2 C8 F8 g$ D# W, U9 _
  28.          * 顺序还是随机
  29.          */. J& F: o$ z; T6 Z  X  u4 L: J- U; x
  30.         private String sortFlag;
  31.         /**% o# c+ C; ~6 s: u' ~
  32.          * 备注
  33.          */
  34.         private String remark;6 Z5 |) h/ X  P) o5 f; |
  35.         /**
  36.          * 模型名称# ?# d9 ^2 O8 g9 N2 H& a
  37.          */
  38.         private String modelName;4 O8 d* ^# Z( s
  39.         /**
  40.          * 对应的xml文件名称
  41.          */% u& p0 p9 p+ l5 q+ L: u6 m: D3 o9 I
  42.         private String fileName;- m: `" g1 `5 c9 _7 `; {
  43.         public List<Condition> getRegularCondtionList() {
  44.                 return regularCondtionList;5 v5 L* u' Z; \0 E1 l% X
  45.         }
  46.         public void setRegularCondtionList(List<Condition> regularCondtionList) {
  47.                 this.regularCondtionList = regularCondtionList;3 u; m$ L( w3 n
  48.         }
  49.         public List<ConditionField> getDynamicConFieldList() {
  50.                 return dynamicConFieldList;
  51.         }
  52.         public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {) r7 W+ j  }) v" [
  53.                 this.dynamicConFieldList = dynamicConFieldList;
  54.         }. Q' {# ]) l  h- ?% d' n8 U
  55.         public Integer getTopnum() {' c+ ~% ?" J6 i1 c2 Q# l6 q
  56.                 return topnum;2 Y0 a$ a* C8 k% ~6 @
  57.         }9 g2 j) f6 ~0 ?& D$ {/ m) X; z
  58.         public void setTopnum(Integer topnum) {
  59.                 this.topnum = topnum;
  60.         }
  61.         public String getSortFlag() {: k' B: _  F2 b: V
  62.                 return sortFlag;. {" J+ n2 A6 J
  63.         }5 }. C  D3 _* L3 ?  D. F1 E
  64.         public void setSortFlag(String sortFlag) {
  65.                 this.sortFlag = sortFlag;4 B" k# x6 t: l$ G1 E% e) d3 x7 U
  66.         }  E. T2 R" J. }3 X- t
  67.         public String getRemark() {
  68.                 return remark;8 M. |/ N; {  n% b" r
  69.         }& @9 R$ e( t( R, `8 Y+ u
  70.         public void setRemark(String remark) {4 q" X) z+ T0 l* r" ?- B4 z
  71.                 this.remark = remark;3 k& b( R; R5 c% M6 {4 P
  72.         }
  73.   S7 |- R, t: ^5 Z% m
  74.         
  75.         public String getModelName() {  D  T8 y2 p: U* t7 d4 U. A! V, o; e
  76.                 return modelName;
  77.         }) T( T9 N# ]* K( `1 O1 j
  78.         public void setModelName(String modelName) {) c, _- R' S2 k- c4 T% _
  79.                 this.modelName = modelName;
  80.         }, |. y" r5 \2 V9 Z8 `' a* D/ D* I
  81.         public List<ResultField> getResultField() {/ g* b) E8 R! w  e& s
  82.                 return resultField;7 }3 i. g; A, U+ d; j
  83.         }* i1 ]. e7 a' W% L5 n" G0 C
  84.         public void setResultField(List<ResultField> resultField) {
  85.                 this.resultField = resultField;! o' ?9 z2 {, E
  86.         }9 Q8 S2 q$ Z9 E# C/ |* X
  87.         public String getFileName() {$ q( ^3 @$ x3 ^! F# H: H4 R( ^
  88.                 return fileName;/ [9 N, H6 o1 n6 w. K0 v
  89.         }
  90.         public void setFileName(String fileName) {
  91.                 this.fileName = fileName;2 W: w$ H6 h$ `# U
  92.         }
  93.         
  94. }
复制代码
在转化的时候需要这样来写:/ w, e' G( c0 m3 m  e( v% N
  1. Map<String, Class> classMap = new HashMap<String, Class>();/ w1 c6 K3 C8 Z
  2. 0 k5 B7 l# [  z" h
  3. classMap.put("regularCondtionList", Condition.class);

  4. classMap.put("dynamicConFieldList", ConditionField.class);

  5. classMap.put("resultField", ResultField.class);
  6. + o9 x; [: F; e3 r3 Q' r9 a# x
  7. AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);
复制代码
阅读全文
0 0