【问题标题】:.NET Core 3 preview 4: 'AddNewtonsoftJson' is not defined.NET Core 3 预览版 4:未定义“AddNewtonsoftJson”
【发布时间】:2019-04-21 21:42:01
【问题描述】:

使用 .NET Core 3 预览版 4,无法构建 F# ASP.NET MVC 项目的“API”模板。这对模板没有任何更改。

这是失败的代码:

type Startup private () =
    member this.ConfigureServices(services: IServiceCollection) =
        // Add framework services.
        services.AddControllers().AddNewtonsoftJson() |> ignore

有错误

...\Startup.fs(23,35):错误 FS0039:未定义字段、构造函数或成员“AddNewtonsoftJson”。也许您想要以下之一:AddNewtonsoftJsonProtocol

似乎有changes coming for this - 它只是正在处理并且现在无法使用吗?

【问题讨论】:

    标签: f# .net-core-3.0


    【解决方案1】:

    为了将 ASP.NET Core 3.0 切换回使用 JSON.NET,您需要引用 Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet package。这将包含AddNewtonsoftJson 扩展方法。

    在 C# 中,这看起来像这样:

    services.AddControllers()
        .AddNewtonsoftJson();
    

    因此,假设我对 F# 有足够的了解,我会说如果您的项目中引用了包,那么您的调用将是正确的。

    【讨论】:

    • @MortenOC 你说的“不起作用”是什么意思?它不编译,还是 JSON 不工作? AddControllers 和 AddControllersWithViews 都返回相同的 MvcBuilder(只是配置不同),因此调用 AddNewtonsoftJson() 应该可以正常工作。
    • 原来我的包号错误。.AddControllersWithViews().AddNewtonsoftJson() 的控制器中没有使用 NewtonsoftJson。只有 .AddControllers().AddNewtonsoftJson() 有效
    • 使用 Microsoft.AspNetCore.Mvc.NewtonsoftJson 3.0.0 'IServiceCollection' 不包含 'AddNewtonsoftJson' 的定义,并且最佳扩展方法重载 'NewtonsoftJsonMvcBuilderExtensions.AddNewtonsoftJson(IMvcBuilder)' 需要接收器类型'IMvcBuilder'
    • @PawelCioch 您需要先调用AddControllers() 或类似的方法才能获得 MvcBuilder 实例。然后你可以打电话给AddNewtonsoftJson()。
    【解决方案2】:

    添加包:Microsoft.AspNetCore.Mvc.NewtonsoftJson
    包详细信息:https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.NewtonsoftJson
    如下所述调用AddNewtonsoftJson()扩展方法

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews().AddNewtonsoftJson();
        }
    

    【讨论】:

      【解决方案3】:

      这对我有帮助:

      1. Startup.cs 中的代码

      services.AddControllers().AddNewtonsoftJson(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

      1. 将所有 Nuget 包升级到 3.1.8(3.1.3 不工作)

      【讨论】:

        【解决方案4】:

        这对我有用,从 NuGet 安装 NewtonsoftJson 包 “dotnet 添加包 Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 3.1.0” 3.1.0 版适用于 ASP.NET Core 3.0 并使用以下代码-

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
                .AddNewtonsoftJson(opt => {
                    opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                });
        

        希望一切正常,谢谢。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-29
          • 2019-10-13
          • 1970-01-01
          • 2013-08-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多