diff --git a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplObject.java b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplObject.java index d23a43834..829f37a06 100644 --- a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplObject.java +++ b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplObject.java @@ -102,8 +102,8 @@ public final class ObjectReaderImplObject contextClass = classLoader.loadClass(typeName); } catch (ClassNotFoundException ignored) { } - - if (!objectClass.equals(contextClass)) { + //明确contextClass类型与objectClass不一致时才更改reader + if (contextClass != null && !objectClass.equals(contextClass)) { autoTypeObjectReader = context.getObjectReader(contextClass); } } diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_3200/Issue3208.java b/core/src/test/java/com/alibaba/fastjson2/issues_3200/Issue3208.java new file mode 100644 index 000000000..4d6ad314c --- /dev/null +++ b/core/src/test/java/com/alibaba/fastjson2/issues_3200/Issue3208.java @@ -0,0 +1,27 @@ +package com.alibaba.fastjson2.issues_3200; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializeConfig; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.google.common.collect.ImmutableMap; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +public class Issue3208 { + @Test + public void testArray() { + byte[] bytes = new byte[]{1, 2, 3}; + String jsonString = JSON.toJSONString(bytes, SerializerFeature.WriteClassName); + byte[] bytes1 = (byte[]) JSON.parse(jsonString); + Assertions.assertTrue(Arrays.equals(bytes, bytes1)); + } + + @Test + public void testObjectArray() { + byte[] jsonBytes = JSON.toJSONBytes(new Object[]{JSON.toJSONString(ImmutableMap.of("a", 1))}, new SerializeConfig(true), JSON.DEFAULT_GENERATE_FEATURE, SerializerFeature.WriteClassName); + Object parsed = JSON.parse(new String(jsonBytes)); + Assertions.assertNotNull(parsed); + } +}