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

如何解决.NET 5迁移后AlanJuden MvcReportViewer报MissingMethodException问题

解决方案

根因说明

AlanJudenMvcReportViewer原生基于.NET Core 2.1开发,其基类ReportController中调用的Json(object, Newtonsoft.Json.JsonSerializerSettings)重载在.NET Core 3.0及后续版本(包含.NET 5)中被移除,.NET默认改为使用System.Text.Json作为序列化组件,因此触发MissingMethodException异常。

方案一:重写父类方法(无需修改源码,优先推荐)

你不需要修改Nuget包的源码,直接在你自己的ReportController中重写父类的同名方法,覆盖原有逻辑即可:

  1. 将以下代码添加到你的ReportController类中:
/// <summary>
/// 重写父类ViewReportPage方法,适配.NET 5的序列化规则
/// </summary>
public new ActionResult ViewReportPage(string reportPath, int page = 1)
{
    var model = GetReportViewerModel(Request);
    model.ReportPath = reportPath;
    var reportResult = RunReport(model, page);
    
    // 使用.NET 5自带的System.Text.Json序列化
    return Json(reportResult, new System.Text.Json.JsonSerializerOptions
    {
        // 保留属性名原大小写,避免前端JS无法匹配字段
        PropertyNamingPolicy = null,
        // 取消特殊字符转义,避免中文、符号显示异常
        Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
    });
}
  1. 如果后续调用ReloadParameters、FindStringInReport接口也出现同款报错,用同样逻辑重写对应方法即可,只需把返回值的Json参数替换为上述System.Text.Json.JsonSerializerOptions配置。

方案二:修复Newtonsoft.Json配置(解决你之前配置不生效的问题)

你之前方案2失效大概率是配置位置不对,按以下步骤修正:

  1. 确保安装对应版本的Nuget包:Microsoft.AspNetCore.Mvc.NewtonsoftJson,版本号必须选择5.x.x,匹配你的.NET 5 runtime版本。
  2. 打开Startup.cs,找到ConfigureServices方法,如果你迁移后使用的是默认的AddControllersWithViews(而非旧版的AddMvc),按以下方式配置:
// 旧写法如果是services.AddMvc().AddNewtonsoftJson(),大概率不生效,替换为下面的写法
services.AddControllersWithViews()
    .AddNewtonsoftJson(options =>
    {
        // 可选配置:保持和原序列化规则一致,避免属性名大小写问题
        options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
    });
  1. 清理解决方案、删除bin和obj文件夹后重新编译运行即可。

备选方案:直接引用源码修改

如果上述两个方案都无法生效,可以直接将AlanJudenMvcReportViewer的源码下载到你的解决方案中,移除原Nuget包引用改为项目引用,直接修改源码中ReportController里的Json方法参数即可。

内容的提问来源于stack exchange,提问作者Rod Foulcher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:18:03