当前位置: 首页 > 知识库问答 >
问题:

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

刘英彦
2023-03-14

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

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public DateTime? Created { get; set; }

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

我只能找到杰索尼诺。

我错过什么了吗?

共有3个答案

白翰海
2023-03-14

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

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

services.AddControllers()
    .AddNewtonsoftJson();

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

阎裕
2023-03-14

我在看.NETCore3.1,它应该忽略空值

services.AddControllers().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.IgnoreNullValues = true;
});

在. NET 5及更高版本中,将JsonSerializerOptions.DefaultIgnoreCondition设置为JsonIgnoreCondition.WhenWritingNull

services.AddControllers().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
});

请注意,上述内容不是每个属性/属性,尽管有一个属性可能会有所帮助 JsonIgnoreAttribute

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

裴卓君
2023-03-14

此问题已在 .Net 5 上修复

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]

请参阅以下更新

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

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

 类似资料:
  • 我试图只返回有值的属性,但也会返回空值。 我知道有一个注解可以做到这一点(),但是我需要在每个实体类中使用这些。 所以,我的问题是:有没有办法通过spring配置全局配置?(最好避免使用XML) 编辑:似乎这个问题已经被认为是重复的,但我不这么认为。这里真正的问题是如何通过Spring config配置它,这是我在其他问题中找不到的。

  • 我不知道为什么,但dom4j不加载xmlns属性,如: xmlns=”http://webservices.example.com/servicesplatform/command/1.0.0“xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance" 其他属性通常会加载,但会被忽略。我使用属性迭代器检查所有元素的所有属性。 下面是我如何读取此xml

  • 问题内容: HTML / CSS中是否有任何内容可以告诉浏览器完全忽略空格? 如此多次,当您想要将两个图像彼此并排放置时-拼命尝试使HTML可读,但是浏览器在它们之间放置了一个空格。 因此,而不是像这样: 你最终得到这个 真是太恐怖了! 问题答案: 哦,您只需一行CSS就可以轻松实现: 劣势,你问?尚无 浏览器实现此 极其有用的功能(通常考虑内联块)。 我有时会做些什么,尽管黑夜很丑,但还是要使用

  • 问题内容: 在这个例子中 如果JSON对象缺少属性“ age”, 有人说它不能反序列化。在反序列化期间是否有 注释 可以忽略丢失的字段? 谢谢 问题答案: 我想你想要的是 这就是Jackson 1.x的方式。我认为2.x中有一种新方法。就像是 这些将告诉Jackson仅序列化不为null的值,并且在反序列化缺少的值时不会抱怨。我认为它将只是将其设置为Java默认值。

  • 我正在用java中的jackson构建一个json体。它会像下面这样 基于不同的 REST URI,json 主体必须忽略某些字段或元素。如何使用杰克逊忽略上述 json 正文中的“学生”部分?当我忽略它时,我应该只能得到 但我得到它如下,这是不正确的- 我有两个带有getters和setters的类,一个作为主语,另一个作为学生。我尝试使用@JsonIgnore,但是它忽略了所有的URI,这是我

  • 有什么办法能做到这一点吗? 谢谢!