Open wangjing112 opened 1 year ago
设计就是这样的,不是BUG
那设置了FieldBased 还有其他途径对字段做反序列化的处理吗? 还是说一旦设置FieldBased,只能解析到属性上?如果是这样的话,感觉不如以前的设计.
如果没有设置FieldBased,public field和public的getter/setter会被解析。fastjson 1.x也是这样的
如果没有设置FieldBased,public field和public的getter/setter会被解析。fastjson 1.x也是这样的
1.x 不是这样的,在1.x里面如果有setter会优先给setter处理.
说一下应用场景,项目中有若干配置数据,配置数据读入private字段,不希望被直接访问. 有配置如下: [{"id":123,"args":"23,123,23,4213,123"},...] 配置类需要将args解析成一个int[]数组.因为在具体使用中是采用int[]进行处理的. 所以在1.x的时候,配置类如下
public class Cfg{
private int id;
private int[] args;
public void setArgs(String str){
args = prace(str);
}
`
如果这种方式无效了的话,现在只能采用先用一个string存放数据,读入后在将其转换成int[].
但带来的影响就是,如果这个配置数据数量很多的话,那么每个对象至少多了4个字节,造成不必要的内存消耗.
捞一下这个问题,目前这个问题是唯一阻止项目升级到fastjson2的最后一块石头了.
收到需求,我要想下这个怎么实现。只有一个类这样么?还是有多个类?
收到需求,我要想下这个怎么实现。只有一个类这样么?还是有多个类?
很多类,因为我们应用有大量的配置文件需要处理,配置文件中存在对各种数据的预处理,需要进行各种转换变成更好的数据结构给应用层使用.
因为配置数据是由一个数据系统生成,而且一份配置是给诸多应用使用的,所以无法去修改输出的json文件格式. 我们在用fastjson1的时候,就采用了setter的方式灵活的进行了配置数据的处理.希望2能继续支持这个功能. 感谢!
再捞一下这个问题.
这还有救嘛?
问题描述
当设置JSONReader.Feature.FieldBased 不会调用public的setter进行复制了. 即使没有合适private的成员,也不调用合适的setter.
环境信息
请填写以下信息:
重现步骤
如何操作可以重现该问题: