Чтение списка из appsettings.json

#c# #.net-core

Вопрос:

Мне нужно прочитать «Продукты» в переменной списка<(строка,строка [])>. appsettings.json:

 {
  "Products": [
    {"fruits":["apple","cherry","tomato"]},
    {"vegetables":["carrot","tomato"]}
  ]
}
 

Примечание: Пожалуйста, предположите, что я не могу изменить этот формат ввода appsettings.json. Но переменная также может быть массивом значений, а не списком значений. Формат ValueTuple должен быть (категория строки,элементы строки []).

Спасибо @Serge за отличный ответ ! Я уверен, что я не один борюсь с linq и этим конфигурационным файлом.

Ответ №1:

попробуйте это

  var products = Configuration
 .GetSection("Products")
 .Get<Dictionary<string, string[]>[]>()
 .SelectMany(i => i)
 .Select(i => new Tuple<string, string[]>(i.Key, i.Value)) // or you can convert here to any class
 .ToList();
 

Комментарии:

1. Это очень элегантно ! Я попробовал, и это работает просто великолепно. Спасибо!

2. Мы вам очень рады!

3. Я использовал это «Выберите(i => (i.Ключ, i.Значение))», так как мне нужен System.ValueTuple. Интересно, что «новое» меняет.

4. Кортежи очень хитры. Я бы предпочел оставить пару значений ключа или преобразовать в конкретный класс

5. На данный момент я буду придерживаться ValueTuple, так как он предлагает преимущества, которые я ищу, например, переименование полей Item1 и Item2, изменяемых, IComparable и IStructuralEquatable.