эквивалент значения по умолчанию при преобразовании моей реализации newtonsoft в новую библиотеку JSON в .net core 3.0 - PullRequest
2 голосов
/ 23 октября 2019

Я конвертирую свое ядро ​​.net 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 Ответ

1 голос
/ 25 октября 2019

Как отмечено в Ошибка # 38878: опция System.Text.Json игнорировать значения по умолчанию при сериализации и десериализации , с .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;

Фактически документация для DefaultValueAttribute рекомендует выполнитьименно это:

A DefaultValueAttribute не приведет к автоматической инициализации элемента со значением атрибута. Вы должны установить начальное значение в своем коде.

Демонстрационная скрипка здесь .

...