Android json解析 含有自定义泛型参数的bean
不多说,上代码:
这是最外层的一个bean
public class TestJsonVo<T> implements Serializable { private T data; public T getData() { return data; } public void setData(T data) { this.data = data; } @Override public String toString() { return "TestJsonVo [data=" + data + "]"; } }
public class TestJsonTemp { private List<TestJsonListObj> list; public List<TestJsonListObj> getList() { return list; } public void setList(List<TestJsonListObj> list) { this.list = list; } @Override public String toString() { return "TestJsonTemp [list=" + list + "]"; } }
public class TestJsonListObj { private String test1; private String test2; public String getTest1() { return test1; } public void setTest1(String test1) { this.test1 = test1; } public String getTest2() { return test2; } public void setTest2(String test2) { this.test2 = test2; } @Override public String toString() { return "TestJsonListObj [test1=" + test1 + ", test2=" + test2 + "]"; } }
public static void main(String[] args) { TestJsonVo<TestJsonTemp> testJson = new TestJsonVo<TestJsonTemp>(); TestJsonTemp data = new TestJsonTemp(); ArrayList<TestJsonListObj> list = new ArrayList<TestJsonListObj>(); TestJsonListObj e = new TestJsonListObj(); e.setTest1("111111111111"); e.setTest2("111111111111"); list.add(e); data.setList(list); testJson.setData(data); String json = JSON.toJSONString(testJson); System.out.println(json);
打印结果:{"data":{"list":[{"test1":"111111111111","test2":"111111111111"}]}} 没问题
然后再把{"data":{"list":[{"test1":"111111111111","test2":"111111111111"}]}}转为Object:
TestJsonVo<TestJsonTemp> obj= JSON.parseObject(json, TestJsonVo.class); System.out.println(obj);
结果为:TestJsonVo [data={"list":[{"test1":"111111111111","test2":"111111111111"}]}] 很明显data对象根本没转过来 ,而且obj.getData().getList() 会报java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to testFastjson.TestJsonTemp
后来用TypeReference试了一下 再java下没问题,但是放到Android上的时候还是报java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to testFastjson.TestJsonTemp :
TestJsonVo<TestJsonTemp> parseObject = JSON.parseObject(json, new TypeReference<TestJsonVo<TestJsonTemp>>() { }.getType()); System.out.println(parseObject.toString()); System.out.println(parseObject.getData().toString());
我换Gson试了一下,可以了
public static void main(String[] args) { TestJsonVo<TestJsonTemp> testJson = new TestJsonVo<TestJsonTemp>(); TestJsonTemp data = new TestJsonTemp(); ArrayList<TestJsonListObj> list = new ArrayList<TestJsonListObj>(); TestJsonListObj e = new TestJsonListObj(); e.setTest1("111111111111"); e.setTest2("111111111111"); list.add(e); data.setList(list); testJson.setData(data); Gson gson = new Gson(); String json = gson.toJson(testJson); System.out.println(json); TestJsonVo<TestJsonTemp> fromJson = gson.fromJson(json, new TypeToken<TestJsonVo<TestJsonTemp>>(){}.getType()); System.out.println(fromJson); }
输出:{"data":{"list":[{"test1":"111111111111","test2":"111111111111"}]}}
TestJsonVo [data=TestJsonTemp [list=[TestJsonListObj [test1=111111111111, test2=111111111111]]]]