Обработка ответа JSON в функции Azure от запроса к концентратору IOT Azure - PullRequest
1 голос
/ 23 сентября 2019

Я новичок в C # и у меня проблемы с обработкой запросов в нужном формате.Если я запускаю код таким образом, ответом будет:

["{\r\n  \"Plant\": \"1195118\"\r\n}","{\r\n  \"Plant\": \"1195157\"\r\n}"]

Что не является желаемым результатом.Фактический желаемый вывод - это JSON следующего формата:

{
"plant":["123235", "1195157"]
}

Код, который я использую, приведен ниже.Я пробовал несколько вариантов, но я борюсь с обработкой JSON на C #.

Любая помощь будет оценена.Спасибо.

string queryString = "SELECT properties.reported.Plant_Number FROM devices WHERE properties.reported.Plant_Number != null";
IQuery query = registryManager.CreateQuery(queryString);
var json = (await query.GetNextAsJsonAsync());
return (ActionResult)new OkObjectResult(json);

1 Ответ

0 голосов
/ 23 сентября 2019

JSON, который вы хотите - это отдельный объект, а JSON, который вы получаете, - это массив с одной записью, которая является строкой.Вкратце: вам нужно проанализировать JSON.

var json = (await query.GetNextAsJsonAsync()); 
return (ActionResult)new OkObjectResult(json);

Первая строка возвращает перечисляемое количество строк, вторая строка возвращает его вызывающей стороне.Вот почему в результате вы получаете массив со строками.

Если вы хотите, чтобы он возвращал JSON, вам потребуется проанализировать строку.Для этого вы можете использовать класс JsonConvert в библиотеке NewtonSoft.Json (поставляется с вашей функцией по умолчанию).Вы можете узнать об этом здесь .

Редактировать после комментария автора:

var jsonStrings = await query.GetNextAsJsonAsync();
var deviceProperties = jsonStrings.Select(JsonConvert.DeserializeObject<DeviceProperty>);
return (ActionResult)new OkObjectResult(deviceProperties);

public class DeviceProperty
{
    public string Plant { get; set; }
}
...