From 2c995ce7b3f92a431f21834a2adac8303bec6dd3 Mon Sep 17 00:00:00 2001 From: Shaojin Wen Date: Sat, 25 Jul 2026 23:38:26 +0800 Subject: [PATCH] fix: add serialVersionUID to JSONArray in fastjson1-compatible for Java serialization compatibility (#7687) --- .../java/com/alibaba/fastjson/JSONArray.java | 2 + .../fastjson/JSONArrayTest_readObject.java | 62 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONArrayTest_readObject.java diff --git a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONArray.java b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONArray.java index a2981e868c..33f328ebe9 100644 --- a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONArray.java +++ b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONArray.java @@ -27,6 +27,8 @@ public class JSONArray static ObjectReader arrayReader; static ObjectReader objectReader; + private static final long serialVersionUID = 1L; + private List list = new com.alibaba.fastjson2.JSONArray(); protected transient Object relatedArray; diff --git a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONArrayTest_readObject.java b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONArrayTest_readObject.java new file mode 100644 index 0000000000..9044e38bb7 --- /dev/null +++ b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONArrayTest_readObject.java @@ -0,0 +1,62 @@ +package com.alibaba.fastjson; + +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamClass; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class JSONArrayTest_readObject { + @Test + public void test_serialVersionUID() { + ObjectStreamClass desc = ObjectStreamClass.lookup(JSONArray.class); + assertEquals(1L, desc.getSerialVersionUID()); + } + + @Test + public void test_0() throws Exception { + JSONArray jsonArray = new JSONArray(); + jsonArray.add(123); + jsonArray.add("hello"); + jsonArray.add(new JSONObject()); + + ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); + ObjectOutputStream objOut = new ObjectOutputStream(bytesOut); + objOut.writeObject(jsonArray); + objOut.flush(); + + byte[] bytes = bytesOut.toByteArray(); + + ByteArrayInputStream bytesIn = new ByteArrayInputStream(bytes); + ObjectInputStream objIn = new ObjectInputStream(bytesIn); + + Object obj = objIn.readObject(); + + assertEquals(JSONArray.class, obj.getClass()); + assertEquals(jsonArray, obj); + } + + @Test + public void test_1() throws Exception { + JSONArray jsonArray = JSON.parseArray("[1,2,3,{\"id\":123}]"); + + ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); + ObjectOutputStream objOut = new ObjectOutputStream(bytesOut); + objOut.writeObject(jsonArray); + objOut.flush(); + + byte[] bytes = bytesOut.toByteArray(); + + ByteArrayInputStream bytesIn = new ByteArrayInputStream(bytes); + ObjectInputStream objIn = new ObjectInputStream(bytesIn); + + Object obj = objIn.readObject(); + + assertEquals(JSONArray.class, obj.getClass()); + assertEquals(jsonArray, obj); + } +}