首页 > 解决方案 > 在系统范围内替换 ASP.NET Core 3.1 JSON 实现

问题描述

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

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

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

Json.Serialize() // used in my razor 
Json() // returns an IActionResult

用例:剃刀页面:Json.Serialize Doc

<script>
   var myModel = @Html.Raw(Json.Serialize(Model))
</script>

用例:控制器

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()

如何覆盖系统实现,暂时调用我自己的实现,以后当 ASP.NET 选择 JSON 实现时,可以轻松恢复到系统的实现。

标签: c#asp.net-core

解决方案


ASP.NET Core 的默认 JSON 序列化程序现在是System.Text.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();
});

推荐阅读