`
lxfengva
  • 浏览: 7946 次
社区版块
存档分类
最新评论

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]]]]

 

 

 

 

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics