从.net5升级到.net7 Json序列化停止工作

xpszyzbs  于 2023-08-08  发布在  .NET
关注(0)|答案(2)|浏览(147)

我们有一个ASP.NET Core 5 Web API后端以及一个ReactJS UI应用程序。在启动时,我们以如下方式示例化json框架:

services.AddControllers()
 .AddNewtonsoftJson()
 .AddJsonOptions(options =>
{
    options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
});

字符串
它与“JsonPropertyName”属性一起工作得很好,即以下属性在JavaScript中正确接收为interfaceId

[JsonPropertyName("interfaceId")]
public long INTERFACE_ID { get; set; }


最终,有人决定将项目升级到.NET 7是个好主意,这导致json序列化停止工作。上面的例子在JavaScript中被接收为interfacE_ID(小写和大写字符正是这样)。同样的,从JavaScript发送到Web API的json对象停止自动序列化为C#对象(得到http 400响应),所以我必须将控制器声明从

public IActionResult Insert([FromBody] Rol entity) => this.Ok(this.service.Insert(entity));


public IActionResult Insert([FromBody] JToken entity) => this.Ok(this.service.Insert(entity.ToObject<Rol>()));


我在这篇文章中看到JSON.Net serializer ignoring JsonProperty?,可能是json.net(或newtonsoft.json)版本上的冲突,所以我清理了所有内容并更新了所有nuget包,删除了System.Text.JsonNewtonsoft.Json包,只保留了Microsoft.AspNetCore.Mvc.NewtonsoftJson
我也尝试应用像这篇文章https://devblogs.microsoft.com/dotnet/system-text-json-in-dotnet-7/中提出的显式json命名转换器,但目前我什么也没实现。由于我不是.net7的Maven,我想知道问题在哪里,或者我是否错过了新框架所需的配置步骤。
谢啦,谢啦
编辑:非常感谢大家
@Serge提出的属性修改工作,所以Newtonsoft.json是处理请求的序列化器。因此,我从startup.cs中删除了.AddNewtonsoftJson(),输出序列化(JavaScript的Web API)又开始正常工作了。
我仍然面临着输入序列化问题(HTTP 400),我猜与.net7可空策略有关,所以我正在寻找一种方法来获得触发HTTP 400响应的正确验证错误

mqkwyuun

mqkwyuun1#

只需将System.Text.Json的name属性修复为Newtonsoft.Json

[JsonProperty("interfaceId")]
public long INTERFACE_ID { get; set; }

字符串
由于您在某些情况下使用Net7来避免验证错误(400),因此这将非常有用

[JsonProperty("interfaceId")]
public long? INTERFACE_ID { get; set; }

4sup72z8

4sup72z82#

答案是你所有回答的混合。最后,我决定删除Newtonsoft.Json,保留System.Text.Json,并调整我的模型类以避免.net7空属性验证

相关问题