在 Azure Function 中处理从查询到 Azure IOT 中心的 JSON 响应

Processing JSON response in Azure Function from query to Azure IOT Hub

我是 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);

你想要的JSON是一个单一的对象,而你得到的JSON是一个数组,其中一个条目是一个字符串。简而言之:您需要解析 JSON.

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

第一行returns一个可枚举的字符串,第二行returns它给调用者。这就是为什么您得到的结果是一个包含字符串的数组。

如果您希望它改为 returns JSON,您将需要解析该字符串。为此,您可以使用 NewtonSoft.Json 库中的 JsonConvert class(默认情况下随您的函数一起提供)。您可以了解 here.

在作者评论后编辑:

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; }
}