/// <summary> /// IoTHubによるデバイスツイン更新EventDataを変換する /// </summary> /// <param name="eventData">EventData</param> /// <returns>RmsEvent</returns> /// <remarks> /// - EventDataがnullの場合はArgumentNullExceptionを投げる /// - EventData#Bodyをデシリアライズできない場合ArgumentExceptionを投げる /// - EdgeIDをSystemPropertiesから取得できない場合はFormatExceptionを投げる /// </remarks> private RmsEvent ConvertTwinChanged(EventData eventData) { // Body以下に必要な情報が格納されている string body = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count); // Bodyをデシリアライズして必要な情報を抽出 DeviceTwinEvent deviceTwinEvent = DeviceTwinEvent.DeserializeIfInvalidThrowEx(body); return(new RmsEvent() { //// EdgeIDを取得 EdgeId = DeviceTwinEvent.GetEdgeId(eventData), //// MessageId //// MessageDataTime /// 他のDispatcherと合わせるため、この時点ではBodyは文字列にしておく。 MessageBody = JsonConvert.SerializeObject(deviceTwinEvent.Reported) }); }