Skip to content

[BUG]Iterable<Object>对象无法被正确序列化 #1563

@ooooooook

Description

@ooooooook

问题描述

Iterable<Object>对象无法被正确序列化

环境信息

  • OS信息: macOS Ventura 13.4 M1 16GB
  • JDK信息: OpenJDK 1.8.0_301
  • 版本信息: Fastjson2.0.33

重现步骤

  1. 在需要序列化的目标类内部定义一个返回值为自定义Iterable的getter方法,如 public Iterable<Object> getData()
  2. 填充数据,然后调用 JSON.writeTo(OutputStream out, Object object) 方法
  3. 输出结果的 "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":{}}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingfixed

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions