c# - 在系统范围内替换 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 实现时,可以轻松恢复到系统的实现。
解决方案
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();
});
推荐阅读
- swiftui - SwiftUI 中的 List 和 ForEach 有什么区别?
- python - 掩码内的 Otsu 阈值
- azure-devops - Azure DevOps 项目列表 GET 不返回项目
- sulu - Sulu:有没有办法以编程方式创建图像
- python - Python:根据列从行创建多行
- c# - BLE advert -- 获取设备显示名称
- javascript - 如何在顶部对最新通知进行排序?
- java - mappedBy 引用了一个未知的目标实体属性:dataObject.PayTransactionStatement.payMaster 中的 ataObject.PayMaster.PayTransactionStatement
- c++ - 在 C++ 中实现 Objective-C (CoreML)(Adobe 插件)
- button - 我的按钮可以在移动设备上包含不同的字体吗?