-
Notifications
You must be signed in to change notification settings - Fork 540
Closed
Labels
Milestone
Description
问题描述
Iterable<Object>对象无法被正确序列化
环境信息
- OS信息: macOS Ventura 13.4 M1 16GB
- JDK信息: OpenJDK 1.8.0_301
- 版本信息: Fastjson2.0.33
重现步骤
- 在需要序列化的目标类内部定义一个返回值为自定义Iterable的getter方法,如
public Iterable<Object> getData() - 填充数据,然后调用
JSON.writeTo(OutputStream out, Object object)方法 - 输出结果的 "data" 字段被序列化为普通JSON对象而不是 JSON数组
import com.alibaba.fastjson2.JSON;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<List<Object>> data = new ArrayList<>();
for (int i = 0; i < 2; i++) {
List<Object> row = new ArrayList<>();
for (int j = 0; j < 2; j++) {
row.add("i_" + i + "_j_" + j);
}
data.add(row);
}
MyData myData = new MyData(data);
JSON.writeTo(System.out, myData);
}
public static class MyData {
private final List<List<Object>> list;
public MyData(List<List<Object>> list) {
this.list = list;
}
public Iterable<Object> getData() {
Iterator<List<Object>> it = list.iterator();
return new Iterable<Object>() {
@Override
public Iterator<Object> iterator() {
return new Iterator<Object>() {
@Override
public boolean hasNext() {
return it.hasNext();
}
@Override
public Object next() {
return it.next();
}
};
}
};
}
}
}期待的正确结果
期望输出结果
{"data":[["i_0_j_0","i_0_j_1"],["i_1_j_0","i_1_j_1"]]}相关日志输出
错误输出结果:
{"data":{}}