相關(guān)的bean如下
          TVO.java代碼如下
          Java代碼 復(fù)制代碼
          1. package demo;  
          2.   
          3. import java.util.*;  
          4.   
          5. import com.easylotto.lottobar.bean.BaseEntity;  
          6. import com.easylotto.lottobar.bean.ReqCommandVO;  
          7.   
          8. public class TVO extends BaseEntity{  
          9.     private String tname;  
          10.     private List<Person> rcvoList;  
          11.     private Map map;  
          12.       
          13.     public List<Person> getRcvoList() {  
          14.         return rcvoList;  
          15.     }  
          16.   
          17.     public void setRcvoList(List<Person> rcvoList) {  
          18.         this.rcvoList = rcvoList;  
          19.     }  
          20.   
          21.     public String getTname() {  
          22.         return tname;  
          23.     }  
          24.   
          25.     public void setTname(String tname) {  
          26.         this.tname = tname;  
          27.     }  
          28.       
          29.   
          30.     public Map getMap() {  
          31.         return map;  
          32.     }  
          33.   
          34.     public void setMap(Map map) {  
          35.         this.map = map;  
          36.     }  
          37.   
          38.     /** 
          39.      * @param args 
          40.      */  
          41.     public static void main(String[] args) {  
          42.         // TODO Auto-generated method stub  
          43.   
          44.     }  
          45.   
          46. }  

          Person.java如下
          Java代碼 復(fù)制代碼
          1. package demo;  
          2.   
          3. public class Person {  
          4.     private String name;  
          5.     private String age;  
          6.       
          7.     public Person(String name,String age){  
          8.         this.name=name;  
          9.         this.age=age;  
          10.     }  
          11.     public String getAge() {  
          12.         return age;  
          13.     }  
          14.     public void setAge(String age) {  
          15.         this.age = age;  
          16.     }  
          17.     public String getName() {  
          18.         return name;  
          19.     }  
          20.     public void setName(String name) {  
          21.         this.name = name;  
          22.     }  
          23.       
          24. }  


          測試類如下:
          Java代碼 復(fù)制代碼
          1. package demo;  
          2.   
          3. import net.sf.json.*;  
          4. import java.util.*;  
          5.   
          6. import com.easylotto.lottobar.bean.ReqCommandVO;  
          7. import com.easylotto.lottobar.bean.SocketCommandEntity;  
          8.   
          9. /** 
          10.  * Json使用測試類 
          11.  * @author peidw  
          12.  * 
          13.  */  
          14. public class JsonDemo {  
          15.       
          16.     public String JsonStr2Object(){  
          17.         String str="{'map':{'a2':'A2','a1':'A1'},'rcvoList':[{'age':'20','name':'小裴'},{'age':'58','name':'小龐'}],'tname':'xxname'}";  
          18.         JSONObject jo=JSONObject.fromObject(str);  
          19.         TVO sce=null;  
          20.         if(jo!=null){  
          21.             sce=(TVO)jo.toBean(jo, TVO.class);  
          22.             List alist=sce.getRcvoList();  
          23.             System.out.println(alist.size());  
          24.             Person rcvo=null;  
          25.             for(int i=0;i<alist.size();i++){  
          26.                 rcvo=(Person)alist.get(i);  
          27.                 System.out.print(rcvo.getName()+"-"+rcvo.getAge());  
          28.             }  
          29.         }  
          30.   
          31.   
          32.         return "測試";  
          33.     }  
          34.       
          35.     public void Object2JsonStr(){  
          36.   
          37.         TVO tvo=new TVO();  
          38.         tvo.setTname("xxname");  
          39.         List <Person>a=new ArrayList();  
          40.         a.add(new Person("小裴","20"));  
          41.         a.add(new Person("小龐","58"));  
          42.         tvo.setRcvoList(a);  
          43.         Map map=new HashMap();  
          44.         map.put("a1", "A1");  
          45.         map.put("a2", "A2");  
          46.         tvo.setMap(map);  
          47.         JSONObject jo=JSONObject.fromObject(tvo);  
          48.         System.out.println(jo);  
          49.     }  
          50.       
          51.     public static void main(String[] args){  
          52.         JsonDemo jd=new JsonDemo();  
          53.         jd.JsonStr2Object();  
          54.         //jd.Object2JsonStr();  
          55.     }  
          56. }  


          出現(xiàn)的異常如下
          2
          Exception in thread "main" java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean
          at demo.JsonDemo.JsonStr2Object(JsonDemo.java:26)
          at demo.JsonDemo.main(JsonDemo.java:53)
          使用的是json-lib-2.2.1-jdk15.jar包,請問這是怎么回事,怎么解決?


          這個問題有兩個地方值得考慮:
          1、一個就是json-lib好像是使用反射實現(xiàn)的,那你的Person類如果沒有無參數(shù)的構(gòu)造方法的話,很危險;
          2、在你的轉(zhuǎn)化的代碼上并沒有告訴程序把rcvoList里的數(shù)據(jù)為何種類型

          為此正確的做法是,為Person添加無參數(shù)的構(gòu)造方法,同時修改代碼為:

          if(jo!=null){ 
                       Map<String, Class> m = new HashMap<String, Class>();
                       m.put("rcvoList", Person.class);
                       sce=(TVO)JSONObject.toBean(jo, TVO.class, m);

          這樣應(yīng)該就OK了…………
          posted on 2008-10-31 11:36 caihaibo 閱讀(1650) 評論(2)  編輯  收藏 所屬分類: json

          評論:
          # re: 主題:一個json-lib.jar轉(zhuǎn)換復(fù)雜對象的問題? 2009-07-21 09:14 | ai4
          如果我還有一個Employee類。
          在TVO類的Map里還有一個List,而List里是放的就是Employee類,那應(yīng)該怎樣處理呢?
          謝謝!  回復(fù)  更多評論
            
          # re: 主題:一個json-lib.jar轉(zhuǎn)換復(fù)雜對象的問題? 2009-07-21 09:15 | ai4
          我說的是json轉(zhuǎn)javabean時怎樣處理?  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 安塞县| 阜新市| 大悟县| 军事| 台东县| 贡山| 舟山市| 临武县| 运城市| 安徽省| 乌拉特中旗| 石家庄市| 宿迁市| 介休市| 泉州市| 琼海市| 开平市| 崇仁县| 湖州市| 元江| 博湖县| 蓝田县| 诸城市| 湾仔区| 萨迦县| 高邮市| 绵竹市| 吉安县| 甘肃省| 绥化市| 平顶山市| 石河子市| 嘉禾县| 谢通门县| 山阴县| 上饶市| 望城县| 炉霍县| 合阳县| 香格里拉县| 北宁市|