TVO.java代碼如下
- package demo;
- import java.util.*;
- import com.easylotto.lottobar.bean.BaseEntity;
- import com.easylotto.lottobar.bean.ReqCommandVO;
- public class TVO extends BaseEntity{
- private String tname;
- private List<Person> rcvoList;
- private Map map;
- public List<Person> getRcvoList() {
- return rcvoList;
- }
- public void setRcvoList(List<Person> rcvoList) {
- this.rcvoList = rcvoList;
- }
- public String getTname() {
- return tname;
- }
- public void setTname(String tname) {
- this.tname = tname;
- }
- public Map getMap() {
- return map;
- }
- public void setMap(Map map) {
- this.map = map;
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- }
- }
Person.java如下
- package demo;
- public class Person {
- private String name;
- private String age;
- public Person(String name,String age){
- this.name=name;
- this.age=age;
- }
- public String getAge() {
- return age;
- }
- public void setAge(String age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
測試類如下:
- package demo;
- import net.sf.json.*;
- import java.util.*;
- import com.easylotto.lottobar.bean.ReqCommandVO;
- import com.easylotto.lottobar.bean.SocketCommandEntity;
- /**
- * Json使用測試類
- * @author peidw
- *
- */
- public class JsonDemo {
- public String JsonStr2Object(){
- String str="{'map':{'a2':'A2','a1':'A1'},'rcvoList':[{'age':'20','name':'小裴'},{'age':'58','name':'小龐'}],'tname':'xxname'}";
- JSONObject jo=JSONObject.fromObject(str);
- TVO sce=null;
- if(jo!=null){
- sce=(TVO)jo.toBean(jo, TVO.class);
- List alist=sce.getRcvoList();
- System.out.println(alist.size());
- Person rcvo=null;
- for(int i=0;i<alist.size();i++){
- rcvo=(Person)alist.get(i);
- System.out.print(rcvo.getName()+"-"+rcvo.getAge());
- }
- }
- return "測試";
- }
- public void Object2JsonStr(){
- TVO tvo=new TVO();
- tvo.setTname("xxname");
- List <Person>a=new ArrayList();
- a.add(new Person("小裴","20"));
- a.add(new Person("小龐","58"));
- tvo.setRcvoList(a);
- Map map=new HashMap();
- map.put("a1", "A1");
- map.put("a2", "A2");
- tvo.setMap(map);
- JSONObject jo=JSONObject.fromObject(tvo);
- System.out.println(jo);
- }
- public static void main(String[] args){
- JsonDemo jd=new JsonDemo();
- jd.JsonStr2Object();
- //jd.Object2JsonStr();
- }
- }
出現(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了…………