SSRS Report Builder如何解析数据集字段中的JSON?

时间:2016-06-09 09:05:49

标签: .net json reporting-services json.net ssrs-2012

我正在Microsoft SQL Server报表服务版本11.0.2100.60上运行的Microsoft SQL Server Report Builder 3.0中创建报表。

我想从我的DataSet中解析存储在某些字段中的JSON值。下面是我的报告预览,显示原始JSON值。

enter image description here

我期望的表达式(虽然没有添加)将如下所示

=Newtonsoft.Json.Linq.JArray.Parse(Fields!MyFieldName.Value).ToString()

由于我需要从任何表达式调用add custom or embedded code to my report,所以我必须add an Assembly Reference to a Report。参考:Using Custom Assemblies with Reports

因此,在我的报告属性中,添加了对Json.net(Newtonsoft.Json.4.5.6)程序集的引用,如下所述。

enter image description here

程序集的路径为C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Newtonsoft.Json.4.5.6\lib\net40\Newtonsoft.Json.dll

我还尝试将程序集添加到C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies\以及C:\Program Files\Microsoft SQL Server\MSRS10_50.SQL2008\Reporting Services\ReportServer\bin\并更改对路径的引用但无效。

还提到了the assembly has no dependency

到目前为止,我刚刚添加了程序集引用,并且没有任何更改。但是,一旦我切换到预览我的报告,错误就会显示如下:

enter image description here

System.Web.Services.Protocols.SoapException: Error while loading code module: ‘Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed’. Details: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.
   at Microsoft.ReportingServices.Library.ReportingService2010Impl.CreateReportEditSession(String Report, String Parent, Byte[] Definition, String& EditSessionID, Warning[]& Warnings)
   at Microsoft.ReportingServices.WebServer.ReportingService2010.CreateReportEditSession(String Report, String Parent, Byte[] Definition, String& EditSessionID, Warning[]& Warnings) 

是否因为程序集中缺少权限属性AllowPartiallyTrustedCallers()?根据引用here并不能解决我的问题,因为我的案例中的汇编不是自定义构建的,也没有其他问题找到here和教程here

我做错了什么?或者是否有任何解析SSRS报告中的JSON的工作示例?

任何帮助都会有很大的帮助。

2 个答案:

答案 0 :(得分:0)

我可能在这里简化了,但是程序集ddl位于客户端上的报表服务器或两者,正如我在过去发现的那样,除非我在客户端和服务器上都有程序集我得到奇怪的错误消息。在将ddl添加到bin目录之后,我的如下(C:\ Program Files \ Microsoft SQL Server \ MSRS12.MSSQLSERVER \ Reporting Services \ ReportServer \ bin)需要重新报告服务器服务以获取程序集

答案 1 :(得分:0)

错误说明它可以找到Version 4.5.0.0;您显示的图像是Version 4.5.6这些图像不可互换,除非明确指定。

所以你有两个选择:

  1. 删除当前对NewtonSoft.Json.dll的引用;从该DLL的所有版本中清除您的文件夹并重新开始。

  2. 在机器级别指定assemblyBinding - machine.config。这是你如何做到的< assemblyBinding > Element for < runtime >。专注于第一个例子。 bindingRedirect就是你要找的。