alibaba / fastjson2

🚄 FASTJSON2 is a Java JSON library with excellent performance.
Apache License 2.0
3.7k stars 479 forks source link

[QUESTION] 是否有办法针对List<Object>中不同元素分别指定反序列化时的类型? #2971

Open fwhdzh opened 1 week ago

fwhdzh commented 1 week ago

是否有办法针对List中不同元素分别指定反序列化时的类型?

对于一个List类型的对象list,我可能会在运行时向其中加入不同类型的元素,比如int, String, 或者是我自己定义的java类。

在我使用FastJson将其转换为JSON字符串后,当我想要再将其转换为List时,我能否通过指定特定位置的元素的类型的方式,使得得到的list中,对应位置是该类型的变量?

如果我使用JSONArray.parseArray(jsonStr, Object.class);,在我定义的java类的元素上,会返回一个JSONObject类型的元素。

下面展示了一个例子。

    @Data
    @AllArgsConstructor
    public static class Inner {
        String var1;
        String var2;
    }

    @Test
    void testFastJson() {
        List<Object> list = new ArrayList<>();
        list.add("s1");
        list.add(2);
        Inner m = new Inner("v1", "v2");
        list.add(m);
        String jsonStr = JSONObject.toJSONString(list);
        List<?> list2 = JSONArray.parseArray(jsonStr, Object.class);
        assertEquals(list, list2);
    }

运行该测试用例会报错:

org.opentest4j.AssertionFailedError: expected: [[s1, 2, MyTest.Inner(var1=v1, var2=v2)]] but was: [[s1, 2, {"var2":"v2","var1":"v1"}]]
 at .......

目前,FastJson是否具有特定的API,可以比较方便的指定反序列化时,列表不同位置的元素的类型? 如果目前没有特定的API,是否有相对应的开发计划?