Как отличить пустое/нулевое/неустановленное свойство массива в appsettings.json?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как отличить пустое/нулевое/неустановленное свойство массива в appsettings.json?

Сообщение Anonymous »

Я использую Microsoft.Extensions.Configuration в ASP.NET Core 9.0 для доступа к конфигурациям из файла appsettings.json:

Код: Выделить всё

public class MySettings
{
public int? Foo { get; set; }
public string[]? Bar{ get; set; }
}
appsettings.json:

Код: Выделить всё

{
[...]
"MySettings": {
"Foo": 42,
"Bar": [
"a",
"b",
"c"
]
}
}
Я читаю эту часть так:

Код: Выделить всё

var mySettings = config.GetSection("MySettings").Get();
Это работает хорошо, mySettings.Bar имеет вид string[3] = ["a", "b", "c"], как и следовало ожидать. .
Теперь мне трудно различить три других случая в appsettings.json:
A:

Код: Выделить всё

{
[...]
"MySettings": {
"Foo": 42
}
}
B:

Код: Выделить всё

{
[...]
"MySettings": {
"Foo": 42,
"Bar": null
}
}
C:

Код: Выделить всё

{
[...]
"MySettings": {
"Foo": 42,
"Bar": []
}
}
Во всех трех случаях mySettings.Bar станет нулевым, но я бы хотел, чтобы только A и B стали нулевыми, а C стать строкой[0].
Я нашел много маленьких кусочков и идей из вопроса для Newtonsoft Json.NET, но я не могу понять, как это сделать втиснуть все это во что-то, что работает Microsoft.Extensions.Configuration:
  • Значение по умолчанию [] для Bar, как также предлагается здесь; хотя это само по себе сломало бы A и B.
  • Код: Выделить всё

    MissingMemberHandling; не уверен, что Include
    приведет к тому, что значение null переопределит значение по умолчанию; и есть ли в System.Text.Json что-нибудь подобное?
  • Код: Выделить всё

    NullValueHandling; те же вопросы, что и для MissingMemberHandling
  • Настраиваемый преобразователь для MySettings может сделать это, если оставить значение по умолчанию равным нулю и взять свой собственный посмотрите на JsonElement при анализе свойства; Я не знаю, где установить JsonSerializerOptions для Microsoft.Extensions.Configuration
  • Некоторые атрибуты самого Bar; но какой? В System.Text.Json для начала не так уж много
Для меня крайне важно уметь различать A и C. B предпочтительно должен стать нулевым, так как об этом говорит файл, но я мог бы справиться и с тем, что это стало строкой[0].

Подробнее здесь: https://stackoverflow.com/questions/792 ... tings-json
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»