fastjson2
fastjson2 copied to clipboard
[BUG] Deserialization includes additional @type information after WriteClassName
问题描述
Map序列化配置WriteClassName后,反序列化会多出类型信息的entry(配置SupportAutoType也是),在fastjson 1.2.83上没有这个问题
环境信息
- OS信息: [MacOS 12.7.4 M1 Pro 16 GB]
- JDK信息: [Openjdk 17.0.6]
- 版本信息:[Fastjson2 2.0.50]
重现步骤
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONWriter;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class Issue336Mutated_758 {
@Test
public void testEmpty() {
HashMap<String, String> map = new HashMap<>();
map.put("date", "2022");
String jsonString = JSON.toJSONString(map, JSONWriter.Feature.WriteClassName);
// HashMap result = JSON.parseObject(jsonString, HashMap.class, JSONReader.Feature.SupportAutoType);
HashMap result = JSON.parseObject(jsonString, HashMap.class);
assertEquals(1, result.size());
}
@Test
public void testEmpty1() {
HashMap<String, String> map = new HashMap<>();
map.put("date", "2022");
String jsonString = com.alibaba.fastjson.JSON.toJSONString(map, SerializerFeature.WriteClassName);
HashMap result = com.alibaba.fastjson.JSON.parseObject(jsonString, HashMap.class);
assertEquals(1, result.size());
}
}
期待的正确结果
不含有@type -> java.util.HashMap项
WriteClassName在parse时应该和SupportAutoType配对使用,这个不是BUG
public void test() {
HashMap<String, String> map = new HashMap<>();
map.put("date", "2022");
String jsonString = JSON.toJSONString(map, JSONWriter.Feature.WriteClassName);
HashMap result = JSON.parseObject(jsonString, HashMap.class, JSONReader.Feature.SupportAutoType);
System.out.println(JSON.toJSONString(result));
// {"date":"2022","@type":"java.util.HashMap"}
assertEquals(1, result.size());
}
是配对使用的,但在parse后的map entry里面依然保留着类型信息@type -> java.util.HashMap
https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.51-SNAPSHOT/ 问题已修复,请帮忙用2.0.51-SNAPSHOT版本验证
验证已修复,辛苦温少
https://github.com/alibaba/fastjson2/releases/tag/2.0.51 问题已修复,请用新版本