将我的newtonsoft实现转换为.net core 3.0中的新JSON库期间的等效默认值

时间:2019-10-23 07:09:54

标签: c# json.net .net-core-3.0 system.text.json

我正在将.net core 2.1转换为3.0,并从newtonsoft升级到内置JSON序列化程序。

我有一些用于设置默认值的代码

[DefaultValue(true)]
[JsonProperty("send_service_notification", DefaultValueHandling = DefaultValueHandling.Populate)]
public bool SendServiceNotification { get; set; }

请帮我解决System.Text.Json.Serialization中的问题。

1 个答案:

答案 0 :(得分:1)

Issue #38878: System.Text.Json option to ignore default values in serialization & deserialization 中所述,自.Net Core 3起,在DefaultValueHandling中没有与System.Text.Json功能等效的功能

话虽如此,您正在使用DefaultValueHandling.Populate

  

具有默认值但没有JSON的成员在反序列化时将设置为其默认值。

这可以通过在构造函数或属性初始化程序中设置默认值来实现:

//[DefaultValue(true)] not needed by System.Text.Json
[System.Text.Json.Serialization.JsonPropertyName("send_service_notification")]
public bool SendServiceNotification { get; set; } = true;

实际上,documentation for DefaultValueAttribute建议这样做:

  

DefaultValueAttribute不会导致成员使用属性值自动初始化。您必须在代码中设置初始值。

演示小提琴here