我通常ShouldSerialize
用来排除没有数据的属性,例如数组,但是现在,当我仅在中使用JSON序列化程序时,它似乎没有被触发.NET Core 3
。使用时触发了它,NewtonSoft
但由于不再需要它,因此将其从项目中删除。
例如:
private ICollection<UserDto> _users;
public ICollection<UserDto> Users
{
get => this._users ?? (this._users = new HashSet<UserDto>());
set => this._users = value;
}
public bool ShouldSerializeUsers()
{
return this._users?.Count > 0;
}
为什么不应该触发ShouldSerializeUsers的任何想法?
我看过其他可以在其中使用的答案:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.NullValueHandling =
NullValueHandling.Ignore;
});
}
但我想知道是否还有其他方法可以处理此问题,因为我没有使用 .AddMvc
谢谢。
你之所以ShouldSerialize
没有在ASP.NET 3.0的核心是触发,在此和后续版本的ASP.NET,不同的JSON序列被默认使用,即System.Text.Json.JsonSerializer
。看到:
不幸的是,从.NET Core 3.1开始,此序列化器不支持该ShouldSerializeXXX()
模式。如果这样做的话,它应该在某处JsonSerializer.Write.HandleObject.cs
-但事实并非如此。下列问题跟踪对条件序列化的请求:
要恢复ShouldSerialize
功能,可以恢复到如图使用Newtonsoft这个答案到哪里IMvcBuilder AddJsonOptions在.net核心3.0去?通过poke,还添加了基于Newtonsoft.Json的JSON格式支持:
Microsoft.AspNetCore.Mvc.NewtonsoftJson
。然后调用AddNewtonsoftJson()
在Startup.ConfigureServices
:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddNewtonsoftJson();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句