/// <summary> /// 現在の環境データを取得します /// </summary> /// <returns></returns> public static ContainerAqualiumRawData DeserializeAqualiumDataCurrent() { var aquadatas = new ContainerAqualiumRawData(); var tableRecords = AzureStrageTable.getTableRecordCurrent(); return(deserializeRecesiveRecord(tableRecords)); }
/// <summary> /// 受け取ったIotHubからのレコードを水槽内部データオブジェクトとしてデシリアライズします /// </summary> /// <param name="propertys"></param> /// <returns></returns> private static ContainerAqualiumRawData deserializeRecesiveRecord(IDictionary <string, EntityProperty> propertys) { List <string> element = new List <string>(); ContainerAqualiumRawData aquaDate = new ContainerAqualiumRawData(); System.Reflection.PropertyInfo[] propertysContainerAqualiumRawData = typeof(ContainerAqualiumRawData).GetProperties(); foreach (var property in propertys) { if (property.Value.PropertyType == EdmType.String) { Console.WriteLine("{0}, {1}", property.Key, property.Value.StringValue); //レコード内部のJson文字列で構成されている"LogOutput"をパーシングしオブジェクトへ格納します if (property.Key == "LogOutput") { string logOutput = ""; logOutput = property.Value.StringValue.Replace("Message received:", ""); logOutput = logOutput.Replace("[", ""); logOutput = logOutput.Replace("]", ""); logOutput = logOutput.Replace("{", ""); logOutput = logOutput.Replace("}", ""); foreach (var logstr in logOutput.Split(',')) { string[] node = new string[2]; node[0] = RevoveChars(logstr.Split(':')[0], new char[] { '"', ':', ' ', '\r', '\n' }); node[1] = RevoveChars(logstr.Split(':')[1], new char[] { '"', ':', ' ', '\r', '\n' }); foreach (var propertyContainerAqualiumRawData in propertysContainerAqualiumRawData) { if (propertyContainerAqualiumRawData.Name == node[0]) { string tmpstr = node[1]; var tmpValue = propertyContainerAqualiumRawData.GetValue(aquaDate); var tmpType = tmpValue.GetType(); double tmpD; int tmpI; if (tmpType.IsPrimitive) { if (double.TryParse(tmpstr, out tmpD)) { propertyContainerAqualiumRawData.SetValue(aquaDate, tmpD); } else if (int.TryParse(tmpstr, out tmpI)) { propertyContainerAqualiumRawData.SetValue(aquaDate, tmpI); } else { throw new Exception(); } } else if (tmpType.Name == typeof(DateTimeOffset).Name) { propertyContainerAqualiumRawData.SetValue(aquaDate, DateTimeOffset.Parse(tmpstr)); } else { propertyContainerAqualiumRawData.SetValue(aquaDate, tmpstr); } break; } } } } } //レコード内部の日時データについては、上記(LogOutput文字列)とは別のパーシングし、対称オブジェクトのプロパティへ格納します else if (property.Value.PropertyType == EdmType.DateTime) { foreach (var propertyContainerAqualiumRawData in propertysContainerAqualiumRawData) { if (propertyContainerAqualiumRawData.Name == property.Key) { var tmpValue = propertyContainerAqualiumRawData.GetValue(aquaDate); var tmpType = tmpValue.GetType(); if (tmpType.Name == typeof(DateTimeOffset).Name) { propertyContainerAqualiumRawData.SetValue(aquaDate, property.Value.DateTimeOffsetValue); } } } } } return(aquaDate); }