ListAggregatorFactory returns system.collections.generic.list`1[system.object]

ListAggregatorFactory returns system.collections.generic.list`1[system.object]

我一直在使用功能强大的 NReco 库来创建数据透视表。并使用非常方便的 HTML 包装器扩展将这些表转换为 HTML。当我使用 '' 时,我将以下内容返回到 HTML.

System.Collections.Generic.List`1[System.Object]

这个错误看起来很简单。 HTML 包装器可能只是在集合对象上调用 ToString() 而不是加入列表。在格式化此列表时,有没有办法覆盖 HTML 包装器功能。

我假设你的意思是来自 NReco.PivotData.Extensions nuget 包的 pivot table 作者(比如 PivotTableHtmlWriter)。

您的建议是正确的,默认情况下聚合器的值只是通过 object.ToString() 调用转换为字符串。这适用于简单的值,但是对于复杂的对象(包括列表)没有默认表示 - 这促使您定义自己的 'value-formatter' 处理程序并且不依赖任何默认约定:

pvtHtmlWr.FormatValue = (aggr,measureIdx) => {
  if (aggr.Count==0)
    return String.Empty;

  if (aggr.Value is IList) {
    var ls = (IList)aggr.Value;
    var sb = new StringBuilder();
    for (int i=0; i<ls.Count; i++) {
      var entryStr = Convert.ToString( ls[i] ); // or apply custom formatting of list entries
      if (entryStr.Length>0) {
        if (sb.Length>0)
          sb.Append(", ");
        sb.Append(entryStr);
      }
    }
    return sb.ToString();
  }

  // apply default number format
  return String.Format("{0:0.##}", aggr.Value); 
};

有关枢轴 table 值格式的更多信息:https://www.nrecosite.com/pivotdata/format-pivot-table.aspx