UpdateReportedPropertiesAsync与复杂类型?

时间:2017-08-21 09:56:45

标签: azure-iot-hub

我正在尝试更新一些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在转义引号方面有点难看:

Device Twin properties

为什么不更新supportedHeatingModes属性对基于复杂类型的对象有效?

还有其他解决方法吗?

1 个答案:

答案 0 :(得分:2)

查看MSDN文档Understand and use device twins in IOT Hub,其中描述了:

JSON对象中的所有值都可以是以下JSON类型:boolean,number,string,object。 不允许使用数组