百度说这是类型转换出错的,比如对象A里面有属性对象B,如果强制转换成对象A就会出现这个错误。下面是代码:
List<Object[]> list = null;
String jsonStr = "AccountOpreate:[";
AccountOpreate dataList[];
AccountMember memberObj;
AccountOpreate opreateObj;
System.out.println("getAllMemberCountDetail dao start");
list = getHibernateTemplate().find("from AccountMember M,AccountOpreate O where M.memberId=O.accountMember and M.accountUser="+orderUser.getUserId());
dataList = new AccountOpreate[list.size()];
for(int i =0;i<list.size();i++){
memberObj = new AccountMember();
opreateObj = new AccountOpreate();
memberObj.setMemberName((((AccountMember)list.get(i)[0])).getMemberName());
memberObj.setMemberMail((((AccountMember)list.get(i)[0])).getMemberMail());
JsonConfig jsonConfig = new JsonConfig(); //设置过滤
jsonConfig.setIgnoreDefaultExcludes(false); //设置默认忽略
jsonConfig.setExcludes(new String[]{"accountUser","accountOpreates"});// 过滤相关字段
String memberJson = JSONObject.fromObject(memberObj,jsonConfig).toString();
jsonStr+=memberJson.substring(0, memberJson.length()-1)+",";
opreateObj.setCreateTime((((AccountOpreate)list.get(i)[1])).getIcomeDate());
opreateObj.setIcomeInfo((((AccountOpreate)list.get(i)[1])).getIcomeInfo());
opreateObj.setRemark((((AccountOpreate)list.get(i)[1])).getRemark());
String opreateJson = JSONObject.fromObject(opreateObj).toString();
jsonStr+=opreateJson.substring(1, opreateJson.length())+",";
}
jsonStr+="]";
其实这个问题通过过滤关键字段也是 解决,不过这就意味着需要丢失一些字段的信息。我的思路是:将一个Object分解后再转换类型,再将两个对象转换成json字符串拼接起来,这样就可以保留需要的信息。当然,如果看哪个字段不顺眼,也可以过滤掉。。。呵呵,好像说复杂了