C # Условно цикл через значения JSON - PullRequest
0 голосов
/ 22 января 2019

Я новичок в этом и прошу прощения, если это дублирующий вопрос.Я пробовал так много разных вещей на данный момент, я не уверен, правильный способ сделать это.

Я пытаюсь написать функцию для цикла JSON и получить значение модели для определенных условий (например: qty != null и sector = 1, position = 1.

Мне также нужно посчитать количество вхождений для каждой уникальной модели. Любая помощь будет принята с благодарностью.

Вот как выглядит JSON.

    [ { "sector": "1", "position": "1", "qty": "1", "model": "SBNHH-1D65C" },
      { "sector": "2", "position": "1", "qty": "1", "model": "" }, 
      { "sector": "3", "position": "1", "qty": "1", "model": "DC6-48-60-18-8F" }, 
      { "sector": "1", "position": "2", "qty": "1", "model": "SBNHH-1D65C" }, 
      { "sector": "2", "position": "2", "qty": "1", "model": "DC6-48-60-18-8F" } ]



public class AntennaItems
{
        public AntennaItems[] root { get; set; }
        public int sector { get; set; }
        public int position { get; set; }
        public string qty { get; set; }
        public string model { get; set; }
}

string requestBodyString = await new StreamReader(req.Body).ReadToEndAsync();

var newJsonString = @"{root:" + requestBodyString + @"}";

List<string> modelList = new List<string>();

var jsonObj = JsonConvert.DeserializeObject<AntennaItems>(newJsonString);

foreach (var elem in jsonObj.root)
{
    modelList.Add(elem.model);
}

return new OkObjectResult($"modelList = {modelList}");

В настоящее время я 'Я получаю этот ответ:

modelList = System.Collections.Generic.List`1[System.String]

Ответы [ 3 ]

0 голосов
/ 22 января 2019
public class AntennaItems
    {
        public int sector { get; set; }
        public int position { get; set; }
        public string qty { get; set; }
        public string model { get; set; }


        [FunctionName("AntennaSort")]
public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

            List<string> modelList = new List<string>();

            var jsonObj = JsonConvert.DeserializeObject<List<AntennaItems>>(requestBody);

            foreach (var elem in jsonObj)
            {
                modelList.Add(elem.model);
            }
            return new OkObjectResult($"modelList = {modelList}");
        }

Результат modelList = System.Collections.Generic.List`1 [System.String]

0 голосов
/ 22 января 2019

Вы вернете modelList в интерполяции с именем строки modelList, а интерполяция вернет вам тип вашего modelList, а в вашем случае это System.Collections.Generic.List'1[System.String].

Итак, эта строка

return new OkObjectResult($"modelList = {modelList}"); 

Дай тебе

modelList = System.Collections.Generic.List`1[System.String]

Поэтому вместо возврата, как указано выше, попробуйте вернуть свой modelList с анонимным типом, чтобы вы могли получать фактические данные, содержащие modelList, например

return new OkObjectResult(new { modelList = modelList}); 

Или просто

return new OkObjectResult(modelList);
0 голосов
/ 22 января 2019

Я думаю, вам не нужно корневое свойство. Я немного изменил класс и удалил из него свойство root:

        public class AntennaItems
    {
        public int sector { get; set; }
        public int position { get; set; }
        public string qty { get; set; }
        public string model { get; set; }
    }


    public HttpResponse ParseJson()
    {
        string requestBodyString = await new StreamReader(req.Body).ReadToEndAsync();

        var newJsonString = @"{root:" + requestBodyString + @"}";

        List<string> modelList = new List<string>();

        var jsonObj = JsonConvert.DeserializeObject<List<AntennaItems>>(newJsonString);

        foreach (var elem in jsonObj)
        {
            modelList.Add(elem.model);
        }
        return new OkObjectResult($"modelList = {modelList}");
    }

Вам необходимо десериализовать его в списке. Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...