使用新的 Net Core 3.0 Json 时忽略属性

Mig*_*ura 29 json json.net asp.net-core-3.0 .net-core-3.0 system.text.json

在 ASP.Net Core 2.2 中使用 JSON.Net 时,当序列化为 JSON 时,当其值为 null 时,我能够忽略属性:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public DateTime? Created { get; set; }
Run Code Online (Sandbox Code Playgroud)

但是,当使用内置于 JSON (System.Text.Json) 的新 ASP.Net Core 3.0 时,如果某个属性的值为 null,我找不到可以忽略该属性的等效属性。

我只能找到 JsonIgnore。

我错过了什么吗?

090*_*9EM 20

我在看 .Net Core 3.1,它应该忽略空值

    services.AddControllers().AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });
Run Code Online (Sandbox Code Playgroud)

请注意,以上不是每个属性/属性,尽管有一个属性可能有用JsonIgnoreAttribute

另一种解决您的问题的方法可能是JsonConverterAttribute,有关如何编写自己的转换器的信息在这里

  • 现在是“options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull”。 (13认同)

dbl*_*ood 11

如果您想要在 JSON 序列化期间忽略空值的属性级别控制,对于 Net Core 3.1,您必须编写一个自定义转换器。Newtonsoft.Json 迁移文档中描述了一些示例

对于使用 Newtonsoft.Json 声明的功能来说,这是一个很大的麻烦。您可以通过在 Startup.ConfigureServices() 中指定尽可能多的内容来指定使用 Newtonsoft.Json 。

services.AddControllers()
    .AddNewtonsoftJson();
Run Code Online (Sandbox Code Playgroud)

如文档所述,您需要添加Microsoft.AspNetCore.Mvc.NewtonsoftJson包。


Mor*_*iya 10

将此添加到您的启动中应该会有所帮助,尽管它不是每个属性也不是一个属性。

services.AddMvc()
        .AddJsonOptions(options =>{ options.JsonSerializerOptions.IgnoreNullValues = true; });
Run Code Online (Sandbox Code Playgroud)


Mur*_*rti 9

这是在 .Net 5 上修复的

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
Run Code Online (Sandbox Code Playgroud)

请参阅下面的更新

https://github.com/dotnet/runtime/issues/41313

https://github.com/dotnet/runtime/issues/30687


cde*_*dev 6

如果你还在 .net core 3.1 中使用 Newtonsoft.Json,你需要像下面这样的配置。

services
   .AddControllers()
   .AddJsonOptions(options =>
   {
       options.JsonSerializerOptions.IgnoreNullValues = true;
   })
   .AddNewtonsoftJson(options =>
   {
       options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
   });
Run Code Online (Sandbox Code Playgroud)

  • 至少对于.NET Core 3.1,不需要调用AddJsonOptions,而只需: ```.AddNewtonsoftJson(options => { options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore; });``` (2认同)