我刚刚将我的ASP Web API项目从.Net core 2.0升级到了3.0。我正在使用
services.AddMvc()
.AddJsonOptions(options =>options.SerializerSettings.ContractResolver
= new DefaultContractResolver());
以前是为了确保序列化JSON的大小写较低。
升级到3.0后,出现此错误...
错误CS1061'IMvcBuilder'不包含以下定义 “ AddJsonOptions”,没有可访问的扩展方法“ AddJsonOptions” 可以找到接受类型为'IMvcBuilder'的第一个参数 您缺少using指令或程序集引用吗?)
根据AddJsonOptions for MvcJsonOptions in Asp.Net Core 2.2, Microsoft.AspNetCore.Mvc.Formatters.Json nuget包提供了AddJsonOptions扩展方法。我尝试安装/重新安装此程序,但仍然无法解决该方法。有趣的是,即使我添加了 Json nuget包,当我尝试添加using语句时,intellisense仍只显示Microsoft.AspNetCore.Mvc.Formatters。 Xml 。
有什么想法吗? AddJsonOptions 的documentation仅适用于.Net 2.2,因此该方法可能已在3.0中被弃用,而采用了其他一些配置机制?
答案 0 :(得分:12)
这对我有用(.net核心3)
services.AddMvc().AddJsonOptions(o =>
{
o.JsonSerializerOptions.PropertyNamingPolicy = null;
o.JsonSerializerOptions.DictionaryKeyPolicy = null;
});
答案 1 :(得分:3)
作为ASP.NET Core 3.0的一部分,该团队默认情况下不再包括Json.NET。您通常可以在announcement on breaking changes to Microsoft.AspNetCore.App中阅读有关此内容的更多信息。
ASP.NET Core 3.0和.NET Core 3.0代替Json.NET,将包括一个不同的JSON API,该API更加注重性能。您可以在announcement about “The future of JSON in .NET Core 3.0”中了解更多信息。
目前,ASP.NET Core 3.0的预览版仍捆绑Json.NET,因为新API的工作尚未完成。但是,这些版本已经发布了使Json.NET成为可选依赖项的代码。如果您查看当前模板中的项目文件,则可以看到对Microsoft.AspNetCore.Mvc.NewtonsoftJson
的引用。基本上,这是使您能够在ASP.NET Core 3.0中继续使用Json.NET的程序包(出于多种原因,我们希望这样做)。
在ConfigureServices
中,当前模板还具有以下代码:
services.AddMvc()
.AddNewtonsoftJson();
这将设置MVC并将其配置为使用Json.NET而不是该新API。而且,该AddNewtonsoftJson
方法具有重载功能,使您可以像在ASP.NET Core 2.x中使用AddJsonOptions
一样配置Json.NET选项。
services.AddMvc()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings = new JsonSerializerSettings() { … };
});
答案 2 :(得分:2)
这将有助于尝试安装Nuget软件包
Microsoft.AspNetCore.Mvc.NewtonsoftJson
答案 3 :(得分:1)
这会有所帮助
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddJsonOptions(options=> { options.JsonSerializerOptions.PropertyNamingPolicy = null;
options.JsonSerializerOptions.DictionaryKeyPolicy = null;
});
services.AddDbContext<PaymentDetailContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DevConnection")));
}
答案 4 :(得分:1)
它对我有用,从 NuGet“dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 3.1.0”版本 3.1.0 安装 NewtonsoftJson 包,适用于 ASP.NET Core 3.0 并使用以下代码-< /p>
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddNewtonsoftJson(opt => {
opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
希望一切顺利,谢谢。
答案 5 :(得分:1)