我正在将.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中的问题。
答案 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。