FastJson反序列化对象不⼀致的解决⽅法
最近在做对象属性拷贝的⼯作,原来使⽤dozerMapper,但是感觉占⽤内存较⾼,速度也不快,虽然功能很强⼤,可以做各种对象的映射。因此计划使⽤传说中飞⼀般的fastJson做序列化和反序列化的⽅式,进⾏数据拷贝。
但是遇到了序列化异常的错误:
Exception in thread "main" com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 316
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:367)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:1010)
at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_9_CustomerInfoBO.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:208)
at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_8_OrderDetailBO.deserialze(Unknown Source)
这⾥说⼀下,我这⾥需要拷贝的对象中存在着⼀个名称相同,但是类型不同的属性,⼀个为json格式的String,⽽另外⼀个为List,刚开始解决⽅向⼀直在错误的⽅向上进⾏,如何替换掉json各种中的双引号,让他⾃动序列化。
最后⽆意间发现@JSONField注解中存在着deserializeUsing属性,也就是反序列化时可以⾃定义⾃⼰的反序列化类,于是写了⼀个继承ObjectDeserializer的类,问题得以解决。
public static final class CustomerListSerializer implements ObjectDeserializer {
@Override
public <T> T deserialze(DefaultJSONParser defaultJSONParser, Type type, Object o) {
List<String> json = defaultJSONParser.parseObject(List.class);
List<Entity> datas= new ArrayList<>();
for(int i=0;i<json.size();i++){
Entity bo = JSON.(i),Entity.class);
bo.setRoomSeq(i+1);
datas.add(bo);
}
return (T)datas;
}fastjson常用方法
@Override
public int getFastMatchToken() {
return 0;
}
}
希望可以帮助更多的⼈~~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论