您的位置:首页 > 其它

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

2017-09-02 22:31 441 查看
在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等
但是如果存在List集合就会出新net.sf.ezmorph.bean.MorphDynaBean cannot be cast to 错误。.
H+ k3 u' W  ?3 S9 ~7 F0 Z
解决方法:

public class Student implements java.io.Serializable{

6 ~) h( X7 K% I; m& }

        /** 

        * @Fields serialVersionUID : TODO3 Z/ M2 Z) }# S. ?, G. w

        */ 

        private static final long serialVersionUID = -1943961352036134112L;: ?" M+ P3 F7 s  a& I!
j

        private String sname;

        private Integer age;

        public String getSname() {# a9 |& C$ T4 o6 e

                return sname;: [- e% L  s" o. f% K" M; g4 R

        }

        public void setSname(String sname) {

                this.sname = sname;

        }7 {+ Y: G9 S+ U/ R+ @  D, N) |

        public Integer getAge() {

                return age;

        }0 ^2 I/ D" h% E; N  `+ A

        public void setAge(Integer age) {

                this.age = age;

        }

        ; M/ s+ N. S  ~6 b$ H# `- c4 F

}

复制代码
由字符串转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…….
}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

比如我定义了如下类型:

import java.util.List;% T$ O3 t2 ]1 m4 j1 n

/**' k* J2 D0 c# T' T3 J



* <P>Tiltle: AnalysisModel.java </P>

* <P>Description:模型类  </P>

* @author biyutong  i) x7 Q7 T% b: }

* @date Jun 11, 2012 9:37:54 AM . L" v2 j" d# X$ A$ D

* @version:V1.0

*/. F; q- w; J( a% p* O! k

public class AnalysisModel implements java.io.Serializable{

% ?$ m4 U9 }+ Z* \0 B! ^6 Q

        /**

         * 固定条件  p/ a/ r9 j) h3 \0 B5 w5 S

         */' w& s  c! L7 g3 c7 \

        private List<Condition> regularCondtionList;//- j  L9 m6 W2 H/ [6 Z) v6 V

        /**$ @# A1 e) ?* \) x

         * 动态条件  T5 H% p2 H) J  m& E

         */

        private List<ConditionField> dynamicConFieldList;

        /**

         * 结果

         */

        private List<ResultField> resultField;- u5 A- ?$ J6 T

        /**# l) `) B, s3 k2 U" p3 d3 g) q

         * 获取前多少条数据

         */

        private Integer topnum;

        /**2 C8 F8 g$ D# W, U9 _

         * 顺序还是随机

         */. J& F: o$ z; T6 Z  X  u4 L: J- U; x

        private String sortFlag;

        /**% o# c+ C; ~6 s: u' ~

         * 备注

         */

        private String remark;6 Z5 |) h/ X  P) o5 f; |

        /**

         * 模型名称# ?# d9 ^2 O8 g9 N2 H& a

         */

        private String modelName;4 O8 d* ^# Z( s

        /**

         * 对应的xml文件名称

         */% u& p0 p9 p+ l5 q+ L: u6 m: D3 o9 I

        private String fileName;- m: `" g1 `5 c9 _7 `; {

        public List<Condition> getRegularCondtionList() {

                return regularCondtionList;5 v5 L* u' Z; \0 E1 l% X

        }

        public void setRegularCondtionList(List<Condition> regularCondtionList) {

                this.regularCondtionList = regularCondtionList;3 u; m$ L( w3 n

        }

        public List<ConditionField> getDynamicConFieldList() {

                return dynamicConFieldList;

        }

        public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {) r7 W+ j  })
v" [

                this.dynamicConFieldList = dynamicConFieldList;

        }. Q' {# ]) l  h- ?% d' n8 U

        public Integer getTopnum() {' c+ ~% ?" J6 i1 c2 Q# l6 q

                return topnum;2 Y0 a$ a* C8 k% ~6 @

        }9 g2 j) f6 ~0 ?& D$ {/ m) X; z

        public void setTopnum(Integer topnum) {

                this.topnum = topnum;

        }

        public String getSortFlag() {: k' B: _  F2 b: V

                return sortFlag;. {" J+ n2 A6 J

        }5 }. C  D3 _* L3 ?  D. F1 E

        public void setSortFlag(String sortFlag) {

                this.sortFlag = sortFlag;4 B" k# x6 t: l$ G1 E% e) d3 x7 U

        }  E. T2 R" J. }3 X- t

        public String getRemark() {

                return remark;8 M. |/ N; {  n% b" r

        }& @9 R$ e( t( R, `8 Y+ u

        public void setRemark(String remark) {4 q" X) z+ T0 l* r" ?- B4 z

                this.remark = remark;3 k& b( R; R5 c% M6 {4 P

        }

  S7 |- R, t: ^5 Z% m

        

        public String getModelName() {  D  T8 y2 p: U* t7 d4 U. A! V, o; e

                return modelName;

        }) T( T9 N# ]* K( `1 O1 j

        public void setModelName(String modelName) {) c, _- R' S2 k- c4 T% _

                this.modelName = modelName;

        }, |. y" r5 \2 V9 Z8 `' a* D/ D* I

        public List<ResultField> getResultField() {/ g* b) E8 R! w  e& s

                return resultField;7 }3 i. g; A, U+ d; j

        }* i1 ]. e7 a' W% L5 n" G0 C

        public void setResultField(List<ResultField> resultField) {

                this.resultField = resultField;! o' ?9 z2 {, E

        }9 Q8 S2 q$ Z9 E# C/ |* X

        public String getFileName() {$ q( ^3 @$ x3 ^! F# H: H4 R( ^

                return fileName;/ [9 N, H6 o1 n6 w. K0 v

        }

        public void setFileName(String fileName) {

                this.fileName = fileName;2 W: w$ H6 h$ `# U

        }

        

}

复制代码
在转化的时候需要这样来写:/
w, e' G( c0 m3 m  e( v% N

Map<String, Class> classMap = new HashMap<String, Class>();/ w1 c6 K3 C8 Z

0 k5 B7 l# [  z" h

classMap.put("regularCondtionList", Condition.class);

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

classMap.put("resultField", ResultField.class);

+ o9 x; [: F; e3 r3 Q' r9 a# x

AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);

复制代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐