From a424be0d9c311036d89a1dc719c20a32566a2b46 Mon Sep 17 00:00:00 2001 From: ra1nz <378243950@qq.com> Date: Sun, 22 Dec 2024 22:57:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E7=BB=84=E7=B1=BB=E5=9E=8B=E8=BD=ACjs?= =?UTF-8?q?on=E5=AD=97=E7=AC=A6=E4=B8=B2=E8=AE=BE=E7=BD=AEWriteClassName?= =?UTF-8?q?=E5=90=8E=E5=8F=8D=E5=BA=8F=E5=88=97=E5=8C=96=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=20(#3217)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 数组类型转json字符串设置WriteClassName后反序列化失败 --------- Co-authored-by: zhengshiyu1 --- .../reader/ObjectReaderImplObject.java | 4 +-- .../fastjson2/issues_3200/Issue3208.java | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 core/src/test/java/com/alibaba/fastjson2/issues_3200/Issue3208.java 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); + } +}