Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

自定义序列化器 bug,版本 最新 fastjson-version 1.2.83 #4382

Closed
2259289435 opened this issue May 6, 2023 · 0 comments
Closed

Comments

@2259289435
Copy link

2259289435 commented May 6, 2023

自定义类型序列化
正常走了序列化,也走了反序列化器,但最后却报错了。

        @Override
        public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
            if(object != null){
                MetricType metricType = (MetricType)object;
                serializer.getWriter().writeString(AbstractTerminalType.getDangerousVal(metricType));
            }
        }
        @Override
        public MetricType deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
            String in = parser.lexer.stringVal();
            if(isNullOrEmpty(in)){
                return null;
            }else{
                return new MetricType(in);
            }
        }
        @Override
        public int getFastMatchToken() {
            return 0;
        }

示例代码:

    @Data
    public static class A {
        private MetricType test;
    }
    @SneakyThrows
    public static void main(String[] args) {
        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
        Class.forName("sdp.common.utils.accuracy.GlobalAccuracyCodec");
        A a = new A();
        a.setTest(new MetricType("1.300"));
        List<A> l = new ArrayList<>();
        l.add(a);
        String str = JSON.toJSONString(l, SerializerFeature.WriteClassName);
        System.out.println(str);
        Object[] objArr = JSON.parseArray(str).toArray();
        System.out.println(Arrays.toString(objArr));
    }

异常

[{"@type":"xxx.A","test":"1.300"}]
Exception in thread "main" com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 65, fastjson-version 1.2.83
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:506)
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:1624)
	at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_A.deserialze(Unknown Source)
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:287)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:405)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:1243)
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:1169)
	at com.alibaba.fastjson.JSON.parseArray(JSON.java:612)
	at com.alibaba.fastjson.JSON.parseArray(JSON.java:592)
@2259289435 2259289435 changed the title 自定义反序列化器失败,版本 最新 fastjson-version 1.2.83 自定义序列化器 bug,版本 最新 fastjson-version 1.2.83 May 6, 2023
@2259289435 2259289435 reopened this May 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant