将应用程序移植到 .NET 8 时,Json 解析器对 Json 更加挑剔。我如何告诉它不要那么挑剔?我无法控制前端发帖。
post
要求:
POST http://localhost/SimplePost HTTP/1.1
Host: localhost
Content-Type: application/json
{ "Name": "WTF", "Id": null }
型号:
public class SimpleModel
{
public string Name { get; set; }
public long Id { get; set; }
}
.NET框架4.8
[HttpPost]
public ActionResult SimplePost(SimpleModel m)
{
return View();
}
结果:
Id = 0
Name = "WTF"
.NET 8 中相同:
[HttpPost]
public ActionResult SimplePost([FromBody] SimpleModel m )
{
return View();
}
.NET 8 的结果:
m is NULL
我试过了
public SimpleModel() { Name = string.Empty; Id = 1;}
public long Id { get; set; } = 1;
public string name { get; set; } = string.Empty;
[DefaultValue(0)]
[DefaultValue("")]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
两个问题:
Id
不允许为空您可以通过更新您的
SimpleModel
类来轻松更改此设置:
public class SimpleModel
{
[JsonPropertyName("Name")]
public string Name { get; set; }
[JsonPropertyName("Id")]
public long? Id { get; set; }
}
使
Id
可为空,并定义与属性一起使用的 JSON 属性名称。默认 JSON 命名约定为“camelCase”(首字母小写) - 因此“name”和“id”将是 JSON 属性的默认名称