我正在使用Aspose报告引擎生成带有Word模板的报告, 我将json数据传递到JsonDataSource中,我想检查word模板中的项目值, 但数据转换为 DataRow,我找不到该值
这是我在word模板中访问数据值的方式:
<<[m.testCategory.Any(x => x[2].ToString()== "1")]>>
很奇怪的是,我在本地环境中可以通过索引2访问数据,但在服务器环境中却无法访问。
如何访问word模板中的数据, 预先感谢您的时间和帮助。
这是代码:
var manager = new Manager
{
testCategory = new int[] { 1 ,2,3}
};
string managerJson = JsonSerializer.Serialize(manager);
byte[] managerJsonBytes = Encoding.UTF8.GetBytes(managerJson);
using MemoryStream managerJsonStream = new MemoryStream(managerJsonBytes);
var managerJsonJsondata = new JsonDataSource(managerJsonStream, new JsonDataLoadOptions
{
SimpleValueParseMode = JsonSimpleValueParseMode.Strict,
});
var dataSources = new Object[] { managerJsonJsondata };
ReportingEngine engine = new ReportingEngine();
engine.Options = ReportBuildOptions.RemoveEmptyParagraphs;
engine.BuildReport(doc, dataSources, new string[] { "m" });
doc.Save("C:\\WorkSpace\\" + "ReportingEngine.HelloWorld.docx");
public class Manager
{
public int[] testCategory { get; set; }
}
根据 https://docs.aspose.com/words/net/accessing-json-data/,以下是如何访问简单值 JSON 数组的项目:
注意 – 要引用简单类型值数组的 JSON 对象属性,应在模板文档中使用该属性的名称(例如“Child”),而相同的名称带有“_Text”后缀(例如,“Child_Text”)应该用于引用该数组的某个项目的值。
所以,
<<[m.testCategory.Any(x => x[2].ToString()== "1")]>>
可以替换为<<[m.testCategory.Any(x => x.testCategory_Text.ToString()== "1")]>>
。
请注意,无需使用 ToString()
,因为支持数值比较。