从49升级到62版本,发现反序列化不调用setXXX方法了,灵魂拷问: 为什么?
json:
{"name", "fastjson"}
实体:
public class Person{
private String name;
public void setName(String name){
this.name=name;
System.out.println("set name");
}
public String getName(){
return name;
}
}
测试代码: 版本62
JSONObject json = new JSONObject(1);
json.put("name", "fastjson");
Person obj = json.toJavaObject(Person.class);//没有打印 set name
之前49版本: 打印 set name
3条答案
按热度按时间ql3eal8s1#
补充:
如果去掉setXXX方法, 反序列化就去不到name
也就是说:
setXXX方法只是用来判断是否有这个属性,给属性赋值却是直接
field.setAccessible(true);
field.set()
o2g1uqev2#
应该是缺少构造函数的原因。
a0x5cqrl3#
这跟构造没关系
在1.2.49版本fastsjson还是通过setXXX来反序列化
不知道什么时候就改了
正常作为一个框架,序列化和反序列化都是通过get/set方法,这基本准则都能改,也没看到realease里提到