You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开源版FastReport能否直接传入JSON字符串作为运行时报表数据源

FastReport社区版直接传入JSON字符串作为数据源的解决方案

首先明确你之前操作的错误点:

  • report.LoadFromString 方法作用为加载报表模板内容(与report.Load功能一致,只是输入源为字符串而非本地文件),完全不用于传入数据源,你之前的报错都是误用该方法导致的。
  • 使用RegisterData注册业务对象后没有启用对应数据源,导致报表上下文找不到对应名称的数据源。
  • 你设计器中的JsonTableDataSource指定了DataType为JsonArray,如果直接传入单个JSON对象会出现结构不匹配的报错。

直接传入JSON字符串的实现方案

该方案完全不需要修改你已有的报表模板,直接替换原有JSON数据源的内容即可,兼容FastReport开源版:

Vehicle fullVehicleInfo = await _vehicleDataService.GetFullVehicleInfoAsNoTracking(_vehicleListingViewModel.SelectedVehicle);
ReportObject ro = new(fullVehicleInfo, DateTime.Now.AddMonths(-1), DateTime.Now);
// 匹配设计器的JsonArray类型要求,将单个对象外层包数组后序列化
string jsonContent = System.Text.Json.JsonSerializer.Serialize(new List<ReportObject> { ro });

Report report = new Report();
report.Load("reportTemplate.frx");

// 提取模板中已定义的JSON数据源连接
var jsonConnection = report.Dictionary.Connections.FindByName("Connection") as FastReport.Data.JsonConnection;
// 直接将JSON字符串写入连接字符串完成数据源替换
jsonConnection.ConnectionString = $"Json={jsonContent}";

// 后续生成导出逻辑不变
report.Prepare();
var reportExport = new FastReport.Export.Image.ImageExport();
report.Export(reportExport, "report.jpeg");

如果你的JSON本身已经是根节点为数组的格式,不需要额外包数组,直接写入连接字符串即可。


补充:RegisterData方案的错误修复

如果你要使用业务对象注册的方式,只需要补全启用数据源的逻辑即可:

// 构造包含单个对象的集合
var dataList = new List<ReportObject> { ro };
report.RegisterData(dataList, "JSON");
// 关键:启用注册的数据源,否则报表上下文无法访问
report.GetDataSource("JSON").Enabled = true;

后续生成报表逻辑不变即可正常运行。

内容的提问来源于stack exchange,提问作者Artur S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:39:00