我正在尝试更新一些Azure IoT设备Twin属性,如下所示:
static async void MainAsync()
{
DeviceClient deviceClient = DeviceClient.CreateFromConnectionString(connectionString);
TwinCollection reportedProperties = new TwinCollection();
dynamic heatingModes = new[]
{
new { Id="OUT2", Name="Comfort" },
new { Id="OUT", Name="Away" },
};
reportedProperties["heatingMode"] = "AWAY";
reportedProperties["supportedHeatingModes"] = heatingModes;
await deviceClient.UpdateReportedPropertiesAsync(reportedProperties);
}
上述代码不起作用,并且没有更新Device Twin属性。
如果我注释掉这一行,一切正常,并且heatingMode属性按预期更新:
reportedProperties["supportedHeatingModes"] = heatingModes;
我还尝试使用常规(非动态)类型加热模式,但它也不起作用。
我还尝试手动将对象序列化为JSON:
reportedProperties["supportedHeatingModes"] = JsonConvert.SerializeObject(heatingModes);
但是,生成的JSON在转义引号方面有点难看:
为什么不更新supportedHeatingModes属性对基于复杂类型的对象有效?
还有其他解决方法吗?
答案 0 :(得分:2)
查看MSDN文档Understand and use device twins in IOT Hub,其中描述了:
JSON对象中的所有值都可以是以下JSON类型:boolean,number,string,object。 不允许使用数组。