当在ASP.NET Core 2.2中使用JSON.Net时,我能够在序列化为JSON时忽略值为null的属性:
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public DateTime? Created { get; set; }
但是当使用新的ASP.NetCore3.0内置JSON(System.Text.JSON)时,我找不到一个等效的属性来忽略值为null的属性。
我只能找到JsonIgnore。
我错过什么了吗?
9条答案
按热度按时间siotufzp1#
我看到的是.NetCore3.1,它应该忽略空值
在.NET 5及更高版本中,将
JsonSerializerOptions.DefaultIgnoreCondition
设置为JsonIgnoreCondition.WhenWritingNull
:注意,上面的不是每个属性/属性,尽管有一个属性可能是有用的
JsonIgnoreAttribute
。另一种解决问题的方法是JsonConverterAttribute,关于如何编写自己的转换器的信息在这里
8hhllhi22#
这个问题在.Net 5上得到了解决
查看下面的更新
https://github.com/dotnet/runtime/issues/41313
https://github.com/dotnet/runtime/issues/30687
qxgroojn3#
如果你想在JSON序列化过程中忽略null值的属性级控制,对于Net Core 3.1,你必须编写一个自定义转换器。在Newtonsoft.Json migration documentation中有一些例子。
这对于使用Newtonsoft.Json的声明性功能来说是一个很大的麻烦。您可以通过在Startup.ConfigureServices()中指定尽可能多的内容来指定使用Newtonsoft.Json。
如文档所述,您需要添加Microsoft.AspNetCore.Mvc.NewtonsoftJson包。
9ceoxa924#
将其添加到启动中应该会有所帮助,尽管它不是每个属性,也不是一个属性。
9avjhtql5#
如果你还在.net core 3.1中使用Newtonsoft.json,你需要像下面这样配置。
lc8prwob6#
如果你使用的是System.Text.Json(.net 5.0),并且你想忽略所有的null,请使用WhenWritingNull条件:
2uluyalo7#
TL&DR:DotNet 6中NullValueHandling已弃用,改用DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
m2xkgtsf8#
如果您使用的是.Net core 6和System.Text.Json,请在program.cs中添加此更改
kdfy810k9#
请参阅官方迁移指南Migrate from ASP.NET Core 2.2 to 3.0
您的服务代码应如下所示: