数组类型转json字符串设置WriteClassName后反序列化失败 (#3217)

* 数组类型转json字符串设置WriteClassName后反序列化失败

---------

Co-authored-by: zhengshiyu1 <zhengshiyu@jd.com>
This commit is contained in:
ra1nz 2024-12-22 22:57:13 +08:00 committed by GitHub
parent 3f5df1bcff
commit a424be0d9c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 2 deletions

View File

@ -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);
}
}

View File

@ -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);
}
}