TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等# W! K4 `) ^$ }# ~" a& P
但是如果存在List集合就会出新net.sf.ezmorph.bean.MorphDynaBean cannot be cast to 错误。
# ?& K# M3 G% C- X解决方法:- public class Student implements java.io.Serializable{
1 ]$ j' m" N, |) c* c/ g0 ]% e - 3 E, J+ P: \/ B. N' m9 z
- /**
; ?# T/ _( p- O* q' `& ` - * @Fields serialVersionUID : TODO" I" ?& z# G( t3 R2 _
- */
" y1 s! B5 I" Q! \1 v& x/ Z# c - private static final long serialVersionUID = -1943961352036134112L;: J0 ^- T# Y$ o4 v
- private String sname;7 z0 a9 P6 j( r2 V. ^* ?
- private Integer age;
) e4 e: j! D; ^' v* m - public String getSname() {
* ]# J7 M, ~0 l! ^+ t( A# e2 E S) _ - return sname;
9 p$ P. o) a* K+ `8 \+ Q - }' C& {! x8 R6 j' T. g
- public void setSname(String sname) {- m* a, }! g2 d1 K9 K
- this.sname = sname;1 M# e) C' c0 P: F( x7 j3 X+ o" p
- }
5 U0 ~ n, V6 U8 J2 | - public Integer getAge() {3 @, y+ P- Y( i. J) {
- return age;2 f, g! j/ K b9 h$ [( U
- }
. y& K5 Z0 T6 {/ q* H3 ] - public void setAge(Integer age) {+ O9 R6 l K2 T% l) {# f
- this.age = age;
: Z, X$ C5 e& w. K; ^& H# }% @5 W& ` - }
* U, |% F! O/ ~3 J7 V# ]. t - / S% W s7 q" [
- }
4 W, V% q1 e0 Z% _1 Y
复制代码 由字符串转java bean时可以使用以下方法:
1 o7 ~3 {$ m y7 p6 W2 R& g. p% G* u" p7 }+ B
- JSONObject jobj = JSONObject.fromObject(str);$ P8 c7 ?2 t5 ^' A0 U
- Student s = (Student) JSONObject.tobean(jobj,Student.class);
复制代码 / O2 C" E' }3 p# O9 m
是没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似List , Map ,ArrayList、自定义的类型,如List<Teacher> teachers, 就不可以了。 会报错:MorphDynaBean cannot be cast to con.test……
! q$ ]1 ~0 w5 \0 @3 g- d) L9 g 在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);+ v1 ~# C, U9 m7 S! m$ ]7 |
1 f1 n9 K& h' D* a, \比如我定义了如下类型:( v' z+ `: ?$ b$ O" k0 |
- import java.util.List;
' k) s, a$ }* Q* A4 u8 C" b) @ - /**1 _7 L. e, n) s; s3 w
- * , Z8 }0 ~/ F4 D( Z% G' S
- * <P>Tiltle: AnalysisModel.java </P>, X! {5 o p7 J! u! s& X
- * <P>Description:模型类 </P>
7 D; k. C, ~; m5 J b - * @author biyutong+ C D. o# e1 `
- * @date Jun 11, 2012 9:37:54 AM ' S3 l1 |3 w7 O- {1 G
- * @version:V1.06 F' H8 j7 I. i( r6 S( k- o: ?3 \
- */
: R6 ~, K2 `7 n! F# \' I$ w+ P - public class AnalysisModel implements java.io.Serializable{/ P( a- t) C! s5 e& z" J/ Z
" D* y9 H+ P: k- /**# D/ |5 c) H" Z
- * 固定条件
3 O5 h( Y$ t- ~* u y - */( P: E: }0 M& n8 w' K7 r6 O$ d0 K
- private List<Condition> regularCondtionList;//
' u9 e5 K' Z4 O3 s5 A - /**
" `: M$ F9 [- L* D9 R - * 动态条件
2 `8 N# Y" E( c% D - */6 W" \4 X0 H. L) q) ^1 u) b
- private List<ConditionField> dynamicConFieldList;" G. s( V9 ]# r# ^% [
- /**, M- b/ T" @$ y8 o0 y
- * 结果- ~1 s3 P7 c9 \8 A
- */% W* H! ^, U/ J5 V
- private List<ResultField> resultField;
5 F* O( X y5 ~8 c - /**
0 M1 l* t! [+ j- g+ A4 I7 f9 j - * 获取前多少条数据" G5 D8 Q' u/ h$ S0 g. v2 p
- */5 K- F& f$ h' z( F) `% M
- private Integer topnum;* n- U! @8 {1 w, v
- /**
1 M/ i* X7 u v3 K3 \& p - * 顺序还是随机: v. W8 f- |( [8 t) C
- */% B5 a# m/ p, T
- private String sortFlag;, Y- o# H+ `6 s* e
- /**
& ^- m: i6 F1 g m) y - * 备注
' K4 q: L; q+ F) e2 l4 o - */- P( f% a" m4 d
- private String remark;
; ~. O% O5 G; m- Y$ S - /**
+ q4 x4 c. w+ ^* J; h4 m8 F" ~ - * 模型名称
( }& W L4 }8 x, { - */
2 X9 w+ E# K5 {- _3 P- F) L3 I0 y! N - private String modelName;
% |9 x! ^; M4 {* f0 d7 A - /**
& _- u0 v: f5 E! J9 m* g# K - * 对应的xml文件名称. d+ |( |2 i# Q6 y9 ?5 Y6 \
- */; @& ]: u& D. A0 r0 ~) V, ]' K
- private String fileName;
" W, @% k. t) t - public List<Condition> getRegularCondtionList() {4 D& b" C5 ~) ]1 u3 o5 `$ x8 K
- return regularCondtionList; b5 e1 ^: v( N, p5 W
- }
* L: D1 v/ H2 M) D/ o - public void setRegularCondtionList(List<Condition> regularCondtionList) {
4 T# r: s5 e# d& T; i7 j - this.regularCondtionList = regularCondtionList;
) O( G4 r7 E4 W7 p, P - }8 O3 u+ y- j! m' T
- public List<ConditionField> getDynamicConFieldList() {4 [7 T( g& t1 i( Q5 B* M
- return dynamicConFieldList;
$ q( e3 z" d( V9 C, c* X/ { - }
7 `/ S6 _* @0 | - public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {
5 M& l f! I3 ^. | - this.dynamicConFieldList = dynamicConFieldList;! a; t! x6 G. P p9 U6 |
- }7 Z$ _7 R2 }, }" F$ K
- public Integer getTopnum() {
+ u( c9 V, r. x6 B/ s6 b2 ^. }$ R( d - return topnum;
2 y$ F, T/ E0 m! P C) k5 ^+ p - }) g. m' K7 u* `. b8 l
- public void setTopnum(Integer topnum) {$ b3 \. t& c* ]" e4 M0 T
- this.topnum = topnum;
0 m. ~! }# v5 I% }5 h$ A5 e - }- f& y: [1 v7 E
- public String getSortFlag() {/ p" Z1 B ?$ p5 P* w! R
- return sortFlag; \' L I h, @
- }
, V* M( [6 L* [1 g - public void setSortFlag(String sortFlag) {
i' U. M3 S; `" b) l - this.sortFlag = sortFlag;+ g7 S/ d0 w8 N
- }
& S! _7 }* O8 i6 S7 B* L! Q, v: O - public String getRemark() {
) i; k5 I6 H4 F" v2 d - return remark;
) a( U& A. Q* s. h% I$ g& R) E0 | - } ]! c5 ]) B: m+ O
- public void setRemark(String remark) {( q( O( a; A* ^: X3 u
- this.remark = remark;
' C- _. U+ @6 {! F7 U/ ~; | - }( N, S, \: R6 i# z
/ j' H, z2 s9 n+ k) a-
! f' u0 T+ E( c( ^ - public String getModelName() {3 {2 f9 i( }8 A0 m6 J4 o
- return modelName;
* s; o# ^3 G6 { - }% n9 d& |1 U6 q# v: S6 _. y; T
- public void setModelName(String modelName) {7 h- t( o+ g D V- F2 Q
- this.modelName = modelName;% z# L, N" X3 G4 Q5 t( i7 [
- }
9 F8 q7 c- |( X+ R - public List<ResultField> getResultField() {2 y9 p1 y$ f* q
- return resultField;2 {+ g( i" K1 H y
- }% d, u0 i! R. q1 Y/ ]* W0 t
- public void setResultField(List<ResultField> resultField) {
% A4 R: h4 B8 o$ t P8 b - this.resultField = resultField;
+ Z6 h( f; ^7 u8 _+ a' w - }# h7 ], V3 c$ T8 N# W* |& E; |
- public String getFileName() {" _# j0 _" p$ o" d, y- h) f4 |
- return fileName;
3 f1 Q) Y1 u& r5 O6 k8 p8 e W - }
' |% u1 b4 B" |7 M, K6 \ - public void setFileName(String fileName) {5 s) M+ N7 M- s0 ^8 i
- this.fileName = fileName;" R4 N" A0 L: N
- }
' Q7 b) G# x6 |& ^( g* n( t4 z -
) e, U& N T9 \; @9 j& e9 D9 L - }
复制代码 在转化的时候需要这样来写:
: b/ t* L" v+ f2 |, U- Map<String, Class> classMap = new HashMap<String, Class>();; l) O7 B& i- I3 ~: o; u3 k
- * I8 C1 Y4 H. x# b1 d- D
- classMap.put("regularCondtionList", Condition.class);' c2 D) n% M+ Y/ ]: }7 [
/ w5 `$ B/ b' }. [- classMap.put("dynamicConFieldList", ConditionField.class);5 D& f# m8 X, m' B' }5 a8 j
- / H5 N) x. f' G: H1 a4 I
- classMap.put("resultField", ResultField.class);
% n0 e5 e5 T4 [
- k& X& w3 d4 d U! G' w8 h- AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);
复制代码 Y/ h, A# h o/ w* \
4 j# `3 \! o- [& P& y; l$ R6 O+ D* T2 U4 _: i5 f7 b ~5 X
* m0 i0 E) p: F8 ]3 i# x
5 `; f3 R" U! I: F% C# Q; D1 \ y
|
|