配置.Net 8像.Net Framework 4.8一样解析json?

问题描述 投票:0回答:1

将应用程序移植到 .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"

enter image description here

.NET 8 中相同:

[HttpPost]
public ActionResult SimplePost([FromBody] SimpleModel m )
{
    return View();
}

.NET 8 的结果:

m is NULL

enter image description here

我试过了

  • 在构造函数中添加默认值
    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)]
  • 寻找。 ;)
asp.net-core-mvc .net-8.0 asp.net-core-8
1个回答
0
投票

两个问题:

  1. 您的
    Id
    不允许为空
  2. 您的大小写不遵循 JSON 默认值

您可以通过更新您的

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 属性的默认名称

© www.soinside.com 2019 - 2024. All rights reserved.