Разбор значений для массива в файле Json с c# с использованием лямбда-выражений - PullRequest
0 голосов
/ 20 марта 2020

У меня есть. Json файл:

[
    {
        "targets":[
            "192.168.1.101:9182",
            "192.168.1.103:9100",
            "192.168.1.105:9182"  
        ]
    }
]

Я хочу разобрать цели и их по значению. Я уже выполнил функцию, которая анализирует файл Json и выходит из системы: Модель класса:

public class targetResponse
    {
        public IList<string> targets { get; set; }
    }

в моем контроллере. У меня есть эта функция, которая выводит все значения:

        [HttpGet]
        public async Task<IEnumerable<targetResponse>> Get()
        {
            IList<targetResponse> myList = new List<targetResponse>();
            var jsonString = System.IO.File
               .ReadAllText(@"D:\\Paths\\targets.json");
            myList = JsonConvert.DeserializeObject<List<targetResponse>>(jsonString);

            return myList;
        }

enter image description here

Функция, которую я хочу создать, состоит в том, что я хочу получить только одно значение из этого файла Json, я попытался сделать следующее, но это не работает:

    [HttpGet("{string}")]
    public async Task<dynamic> Get(string _string)
    {
        IList<targetResponse> myList = new List<targetResponse>();
        var jsonString = System.IO.File
           .ReadAllText(@"D:\\Paths\\targets.json");
        myList = JsonConvert.DeserializeObject<List<targetResponse>>(jsonString);
        return myList.FirstOrDefault().targets.Select(r=>r.ToString()==_string);
    }

enter image description here

Я также хочу создать методы обновления / создания / удаления (CRUD), если есть какое-либо руководство о том, как пожалуйста, поделитесь спасибо

1 Ответ

1 голос
/ 20 марта 2020

У вас неверный оператор Linq в методе Get. Вместо

myList = JsonConvert.DeserializeObject<List<targetResponse>>(jsonString);
return myList.FirstOrDefault().targets.Select(r=>r.ToString()==_string);

Вы можете написать

myList = JsonConvert.DeserializeObject<List<targetResponse>>(jsonString);
return myList.FirstOrDefault().targets.FirstOrDefault(r => r == _string);

Использовать Where или FirstOrDefault вместо Select, в противном случае вы получите список логических значений. Также нет необходимости использовать ToString(), потому что targets - это уже список строк

...