昨天我把我的API升级到了. Net6,今天我想我也应该从Newtonsoft.Json迁移到System.Text.Json。
我做的第一件事是从我的项目中删除Microsoft.AspNetCore.Mvc.NewtonsoftJson
包,我还从Startup.cs
的services.AddControllers()
部分中删除了.AddNewtonsoftJson()
语句。
然后,我将所有using Newtonsoft.Json;
重命名为using System.Text.Json;
,将所有[JsonProperty]
装饰器重命名为[JsonPropertyName]
,等等。
我现在几乎没有错误了,但是我的HttpPatch动作方法遇到了一个障碍。“ModelState”类似乎是Microsoft.AspNetCore.Mvc.NewtonsoftJson
的一个成员,我删除了它。我可以重新添加它,以及在Startup.cs
中将.AddNewtonsoftJson()
重新添加到services.AddControllers()
。但这似乎是我试图实现的目标(即完全切断与Newtonsoft.Json的连接)的倒退。
这是VS显示的错误:
错误CS1503参数2:无法从“Microsoft.AspNetCore.Mvc.模型绑定.模型状态字典”转换为“系统.操作<Microsoft.AspNetCore.JsonPatch.JsonPatchError>”
关于如何让HttpPatch在不依赖Newtonsoft.json的情况下工作,您有什么想法吗?
我的HttpPatch操作方法如下所示:
[HttpPatch("{id:int}")]
public async Task<ActionResult<DocGroup>> PatchDocumentGroup([FromRoute] int id, [FromBody] JsonPatchDocument<DocGroup> patchDoc)
{
if (patchDoc == null)
return BadRequest(ModelState);
var documentGroup = await _context.DocGroups.FindAsync(id);
if (documentGroup == null)
{
return NotFound();
}
patchDoc.ApplyTo(documentGroup, ModelState);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
await _context.SaveChangesAsync();
return new ObjectResult(documentGroup);
}
1条答案
按热度按时间nszi6y051#
目前,ASP.NET Core不支持
JSON Patch
,而不支持Newtonsoft.Json
,请从官方资料库中查看此问题。另一方面,您可以使用此方法添加对JSON Patch
的支持(使用Newtonsoft.Json
),同时保持其他输入和输出格式化程序不变:这样,
NewtonsoftJsonPatchInputFormatter
将处理JSON Patch
请求,现有的基于System.Text.Json
的输入和格式化程序将处理所有其他JSON请求和响应。