问个fastJson 反序列化的问题

ForJustice 发布于 2013/06/05 17:38
阅读 2K+
收藏 0

@wenshao 你好,想跟你请教个问题: 

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;


/**
 * @createTime 2013-6-5 下午04:33:31
 */
public class TestA {

List<Object> listA;

public List<Object> getListA() {
return listA;
}


public void setListA(List<Object> listA) {
this.listA = listA;
}

public static void main(String[] args) {
TestA testA = new TestA();
List<Object> listA = new ArrayList<Object>();
ClassA a = new ClassA();
a.setName("张三");
listA.add(a);
testA.setListA(listA);
// 测试序列化
String jsonStr = JSON.toJSONString(testA);
// 测试反序列化
TestA testA1 = JSON.parseObject(jsonStr, TestA.class);// 这里该如何配置??
ClassA a1 = (ClassA)testA1.getListA().get(0); // 这里出错
System.out.println(a1.getName());
}


}


class ClassA{
String name;

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}
}


我就想反序列化后,那个Object 也为 ClassA,咋办?

加载中
0
llklovewx
llklovewx

这个跟反序列化没有关系,你打印jsonStr的结果是:{"listA":[{"name":"张三"}]}

testA1.getListA().get(0)获取到的是{"name":"张三"}。

应修改为:ClassA a1 =  JSON.parseObject(JSON.toJSONString(testA1.getListA().get(0)), ClassA.class);

ForJustice
ForJustice
感谢. 有没有一步到位得写法?
0
微凉的风
微凉的风
你的TestA类里面的listA属性需要加上泛型就能自动转了:private List<ClassA> listA;
微凉的风
微凉的风
@ForJustice 那就只能用map将就着用,或者自己转成别的类了,没有别的办法了
ForJustice
ForJustice
回复 @刘家华 : 不能加type, 要序列化成通用得
ForJustice
ForJustice
回复 @刘家华 : 是的,所以才出来问问看有没有什么一步到位得方法,毕竟我对fastjson里使用方法不太熟悉
微凉的风
微凉的风
@ForJustice 如果你的json是自己序列化的话,可以用fastjson序列化,有个参数可以在序列化后的json中带上类型信息,就能自动还原了
微凉的风
微凉的风
@ForJustice 哦,那你只能获取到LinkedHashMap,可以用BeanUtils转成你要的类型,但是如果有别的类型,你就得先判断是什么类型了,用你现在的方式强转肯定不行吧
下一页
返回顶部
顶部