c# - 在 Azure Function 中处理从查询到 Azure IOT Hub 的 JSON 响应
问题描述
我是 C# 新手,无法将查询处理为所需格式。如果我以这种方式运行代码,则响应是:
["{\r\n \"Plant\": \"1195118\"\r\n}","{\r\n \"Plant\": \"1195157\"\r\n}"]
这不是预期的结果。实际所需的输出是以下格式的 JSON:
{
"plant":["123235", "1195157"]
}
我正在使用的代码如下。我已经尝试了几个选项,但我在 C# 处理 JSON 时遇到了困难。
任何帮助,将不胜感激。谢谢。
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);
第一行返回一个可枚举的字符串,第二行将它返回给调用者。所以这就是为什么你得到的结果是一个带有字符串的数组。
如果您希望它返回 JSON,则需要解析字符串。为此,您可以使用 NewtonSoft.Json 库中的 JsonConvert 类(默认情况下与您的函数一起提供)。你可以在这里了解。
在作者评论后编辑:
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; }
}
推荐阅读
- ios - 重启 UIView 重复动画
- nginx - Google Cloud Kubernetes Nginx Ingress 挂在“正在创建入口”上
- reactjs - react-navigation:屏幕可以有不同的名称,然后在 routeConfig 中传递什么?
- sql - 前 n 个子组的 Teradata SQL 计数
- javascript - 以编程方式向 Javascript 中的对象添加属性
- java - 处理大型未排序数据集的回归
- c++ - c ++未解决的外部符号
- vb.net - 更改远程机器上的服务启动类型
- android - 如何将 Android.mk 转换为 CMake.txt?
- python - 尝试用硒/美丽的汤提取动态表(网址不变)