升级到3.1后,ASP.NET Core不会从主体绑定参数

问题描述

我刚刚将ASP.NET Core项目从2.2升级到3.1,现在我的模型绑定不适用于POST记录。我读到认的JSON序列化程序在.NET Core 3中从Newtonsoft.JSON更改为System.Text.Json。这可能是原因吗?

我的动作和课堂看起来像这样

[HttpPost]
public IActionResult Foo([FromBody]Bar req)
public class Bar
{
    public string Fiz;
    public int Buzz;
}

解决方法

是的。出现此错误的原因是新的JSON库。

由于某些原因,System.Text.Json不填充字段,仅填充属性。因此,您需要更改类定义Bar才能使用属性

public class Bar
{
    public string Fiz { get; set; }
    public int Buzz { get; set; }
}

序列化过程使用设置器,因此您不能忽略这些设置。

,

我只想指出,如果修改模型不是您的选择,那么您可以添加JSON.NET支持。

只需安装以下nuget软件包:

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

然后在您的startup.cs(添加MVC)中执行:

services.AddMvc().AddNewtonsoftJson();

然后返回到JSON.NET,它是.NET Core 2.X项目使用的序列化程序。

https://dotnetcoretutorials.com/2019/12/19/using-newtonsoft-json-in-net-core-3-projects/