C# 在Azure函数中处理从查询到Azure IOT Hub的JSON响应
我是C语言新手,在将查询处理为所需格式时遇到困难。如果以这种方式运行代码,则响应为:C# 在Azure函数中处理从查询到Azure IOT Hub的JSON响应,c#,json,azure,azure-functions,azure-iot-hub,C#,Json,Azure,Azure Functions,Azure Iot Hub,我是C语言新手,在将查询处理为所需格式时遇到困难。如果以这种方式运行代码,则响应为: ["{\r\n \"Plant\": \"1195118\"\r\n}","{\r\n \"Plant\": \"1195157\"\r\n}"] 这不是期望的结果。实际需要的输出是以下格式的JSON: { "plant":["123235", "1195157"] } 下面是我正在使用的代码。我已经尝试了几个选项,但是我正在为JSON的C处理而挣扎 任何帮助都将不胜感激。谢谢 string query
["{\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);
第一行返回可枚举的字符串,第二行将其返回给调用者。这就是为什么你得到的结果是一个带字符串的数组
如果希望它返回JSON,则需要解析字符串。为此,您可以使用NewtonSoft中的JsonConvert类。默认情况下,函数附带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; }
}
您想要的JSON是单个对象,而您得到的JSON是一个数组,其中一个条目是字符串。简而言之:您需要解析JSON
var json = (await query.GetNextAsJsonAsync());
return (ActionResult)new OkObjectResult(json);
第一行返回可枚举的字符串,第二行将其返回给调用者。这就是为什么你得到的结果是一个带字符串的数组
如果希望它返回JSON,则需要解析字符串。为此,您可以使用NewtonSoft中的JsonConvert类。默认情况下,函数附带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; }
}
您是否可以尝试将最后一行替换为:returncontentjson,application/json;我认为第一个JSON没有任何问题。你能解释一下你收到了什么样的错误吗?我在将JSON响应的格式从第一个示例的格式更改为第二个示例的格式时遇到了问题。常见的错误响应是:无法从“System.Collections.Generic.IEnumerable”转换为“string”。是否可以尝试将最后一行替换为:return Contentjson,application/json;我认为第一个JSON没有任何问题。你能解释一下你收到了什么样的错误吗?我在将JSON响应的格式从第一个示例的格式更改为第二个示例的格式时遇到了问题。一个常见的错误响应是:无法从“System.Collections.Generic.IEnumerable”转换为“string”。如果我实现:var next=JsonConvert.DeserializeObjectjson;我遇到以下错误:无法将“System.Collections.Generic.IEnumerable”转换为“string”。我编辑了答案,以包含更完整的代码示例。反序列化对象需要一个字符串,您可以向它提供一个可枚举的字符串。相反,Select方法将遍历所有字符串并反序列化它们;我遇到以下错误:无法将“System.Collections.Generic.IEnumerable”转换为“string”。我编辑了答案,以包含更完整的代码示例。反序列化对象需要一个字符串,您可以向它提供一个可枚举的字符串。相反,Select方法将遍历所有字符串并反序列化它们。