You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Azure函数中用IoT Hub SQL查询设备列表遇异常的解决咨询

解决Azure IoT Hub SQL查询返回"result type is Raw"错误的方法

错误原因

当你使用SELECT deviceId,tags.SiteId FROM devices这类仅返回部分字段的查询时,IoT Hub返回的是Raw类型的JSON结果,而非完整的Device实体对象。如果后续代码尝试用GetNextAsAsync<Device>这类强类型方法反序列化,就会触发类型不匹配的错误。Azure门户的查询工具会直接解析Raw JSON,因此能正常显示结果。

解决方法

方法1:使用自定义DTO类接收结果

创建一个与查询返回字段匹配的类:

public class DeviceSiteInfo
{
    public string DeviceId { get; set; }
    public string SiteId { get; set; }
}

修改结果读取逻辑,用该类反序列化:

var query = _registry.CreateQuery("SELECT deviceId,tags.SiteId FROM devices", 100);
var deviceList = await query.GetNextAsAsync<DeviceSiteInfo>();

foreach (var device in deviceList)
{
    // 处理device.DeviceId和device.SiteId
}

方法2:使用动态类型读取结果

如果不想创建DTO类,可直接用dynamic类型读取Raw结果:

var query = _registry.CreateQuery("SELECT deviceId,tags.SiteId FROM devices", 100);
var results = await query.GetNextAsAsync<dynamic>();

foreach (var item in results)
{
    string deviceId = item.deviceId;
    string siteId = item.tags.SiteId;
    // 进行后续处理
}

方法3:查询完整设备实体(不推荐)

如果确实需要完整的Device对象,可修改查询语句返回所有字段,但会增加数据传输量:

var query = _registry.CreateQuery("SELECT * FROM devices", 100);
var deviceList = await query.GetNextAsAsync<Device>();

内容的提问来源于stack exchange,提问作者Sayli Godage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:33:27