ReportingEngine使用foreach绑定模板的时候报错

1、测试环境

.Net8,Aspose.Words(v24.11.1)

2、代码

Console.WriteLine("Start");

var jsonData = """
{
    "rptdata": [
        {
            "BGMC": "手动钢结构门生产质量检测结果",
            "sdgjgsczl": [
                {
                    "ypbh": "JGFMF20230088-001",
                    "cpmc": "手动钢结构门",
                    "cpxh": "GHFM1523(5)",
                    "sccj": "上海正承防护设备有限公司",
                    "ccbh": "ZC2210258"
                }
            ]
        },
        {
            "BGMC": "手动钢结构门生产质量检测结果",
            "sdgjgsczl": [
                {
                    "ypbh": "JGFMF20230088-002",
                    "cpmc": "手动钢结构门",
                    "cpxh": "GHFM1523(5)",
                    "sccj": "上海正承防护设备有限公司",
                    "ccbh": "ZC2210258"
                }
            ]
        }
    ]
}
""";

var doc = new Document("Test.docx");

var dataSource = new JsonDataSource(new MemoryStream(Encoding.UTF8.GetBytes(jsonData)));
var engine = new ReportingEngine();
engine.BuildReport(doc, dataSource, "data");

doc.Save($"{Guid.NewGuid()}.docx");

Console.WriteLine("End");

3、Word模板

结果1:
<<foreach [in rptdata]>>
<<[BGMC]>>
	<<foreach [in sdgjgsczl]>><<[ypbh]>>
	<</foreach>>
<</foreach>>

4、问题

此时运行报如下错误:

其实模板和JSON数据都没有问题。

后来我无意间在JSON的rptdata属性前随意加了一个属性,比如aaa,然后再运行就成功了,具体JSON和效果如下:

Console.WriteLine("Start");

var jsonData = """
{
    "aaa":"测试",
    "rptdata": [
        {
            "BGMC": "手动钢结构门生产质量检测结果",
            "sdgjgsczl": [
                {

所以不知道这个问题是不是一个bug呢?还是其他原因造成的。

@quberscyj 这是预期的行为。您应该使用:

JsonDataLoadOptions options = new JsonDataLoadOptions();
options.AlwaysGenerateRootObject = true;

为了避免这个问题。

谢谢,通过该设置已经解决此问题!

1 Like