Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在系统范围内替换ASP.NET Core 3.1 JSON实现_C#_Asp.net Core - Fatal编程技术网

C# 在系统范围内替换ASP.NET Core 3.1 JSON实现

C# 在系统范围内替换ASP.NET Core 3.1 JSON实现,c#,asp.net-core,C#,Asp.net Core,最近,我决定从ASP.NET Core 2.2升级到ASP.NET Core 3.1,并没有预料到所有的突破性变化;我的应用程序几乎每个部分都崩溃了,因为大多数部分都依赖于JSON 为了防止将来出现与JSON相关的问题,是否可以创建一个接口,模仿当前的JSON实现并覆盖默认行为 我的大部分代码都依赖于以下两种方法: Json.Serialize() // used in my razor Json() // returns an IActionResult 用例:剃须刀页面: 如何覆盖系统实

最近,我决定从ASP.NET Core 2.2升级到ASP.NET Core 3.1,并没有预料到所有的突破性变化;我的应用程序几乎每个部分都崩溃了,因为大多数部分都依赖于JSON

为了防止将来出现与JSON相关的问题,是否可以创建一个接口,模仿当前的JSON实现并覆盖默认行为

我的大部分代码都依赖于以下两种方法:

Json.Serialize() // used in my razor 
Json() // returns an IActionResult
用例:剃须刀页面:

如何覆盖系统实现,并调用我自己的实现
现在,以及以后当ASP.NET决定使用JSON实现时,可以轻松地恢复到系统的实现。

ASP.NET核心的默认JSON序列化程序现在是

这样你就可以开始使用它了

或者,如果您想继续在ASP.NET Core 3.0及更高版本中使用Newtonsoft.Json,可以使用Startup.ConfigureServices调用AddNewtonsoftJson

如果您需要像以前一样的东西,例如在ASP.NET Core 2.2中,那么您可以使用默认的契约解析器。例如

services.AddControllers().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});

我有几个文件(+50)使用这个:@Html.Raw(Json.Serialize(Model))和几个返回Json()的语句;在我的启动中,我已经在使用.AddNewtonsoftJson();这对我来说并没有全球性的影响。应该吗?services.AddControllers().AddNewtonsoftJson();对@Html.Raw(Json.Serialize(Model))没有影响;结果是所有字段都是小写的,当然可以想象这种变化的影响。@Wayne Yes,就我所知,它应该是全局的。。我刚刚用System.Text.Json升级了一个2.2项目,导致了太多问题。这一变化适用于我的整个项目。。更新Startup.cs中的选项如何
.AddNewtonsoftJson(options=>options.SerializerSettings.ContractResolver=new CamelCasePropertyNamesContractResolver())@Wayne也。。按照计划,你安装了软件包吗?嗯。。这句话的意思是“有一个重载,允许您配置Json.NET选项,就像您在ASP.NET Core 2.x中使用AddJsonOptions时一样”。也就是说,可能是默认的契约解析程序:
services.AddControllers().AddNewtonsoftJson(options=>{options.SerializerSettings.ContractResolver=new DefaultContractResolver();})这是否回答了您的问题?不,这并不能回答这个问题,因为我能够找到这个选项,我的问题是我的所有json字段最终都是小写的,并且可以很容易地用allot of pain转换每个方法调用。但是,由于这是一个坏的选择,我正在寻找一种方式,有一个全球性的设置。这些选择确实存在,但不完全清楚这些选择应该是什么。DefaultContractResolver()保留大小写,而CamelCasePropertyNamesContractResolver生成所有小写。这听起来很奇怪,因为它是。
public async Task<IActionResult> AjaxGetRoleDetails(int id)
{
        return Json(await GetUserRoles(id));
}
JsonConvert.SerializeObject() // override Json.Serialize
Content(JsonConvert.SerializeObject(), new MediaTypeHeaderValue("application/json")) // override Json()
services.AddControllers().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});