在json字符串转
java
bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等
但是如果存在List集合就会出新net.sf.ezmorph.bean.MorphDynaBean cannot be cast to 错误。 . H+ k3 u' W ?3 S9 ~7 F0 Z
解决方法:
复制代码
由字符串转java bean时可以使用以下方法:
复制代码
是没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似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
比如我定义了如下类型:
复制代码
在转化的时候需要这样来写:
/ w, e' G( c0 m3 m e( v% N
复制代码
但是如果存在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
- }
- 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
- }
-
- }
- 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);