0
在我的家庭自動化系統上,要創建帶有文檔的插件,我必須使用帶有摘要的類。C#反序列化爲動態類
我的插件與我的xiaomi網關通信以獲取有關傳感器的信息。所以有不同類型的傳感器,如「sensor_ht」,「magnet」或「motion」。
對於每個傳感器,有共同的屬性和不同的數據部分。我在jon獲得每個傳感器的狀態。
例如:
{"cmd":"report","model":"magnet","sid":"","short_id":40805,"data":"
{\"status\":\"close\"}"}
{"cmd":"report","model":"sensor_ht","sid":"","short_id":40805,"data":"
{\"voltage\":\"3000\",\"temperature\":\"2367\",\"humidity,\":\"5285\"}"}
所以我創建許多類這樣的,每個傳感器是在一個文件中。
sensor_ht.cs:
public class sensor_ht
{
public string model { get; set; } = "sensor_ht";
public string sid { get; set; }
public string battery_type { get; set; } = "CR2032";
public int battery { get; set; }
public sensor_ht.Report report { get; set; }
}
public class Report
{
public int voltage { get; set; }
public string temperature { get; set; }
public string humidity { get; set; }
}
magnet.cs:
public class magnet
{
public string model { get; set; } = "sensor_ht";
public string sid { get; set; }
public string battery_type { get; set; } = "CR2032";
public int battery { get; set; }
public magnet.Report report { get; set; }
}
public class Report
{
public int voltage { get; set; }
public string status { get; set; }
}
這是我的報告類:
public class Report
{
public string cmd { get; set; }
public string model { get; set; }
public string sid { get; set; }
public int short_id { get; set; }
public string token { get; set; }
public string data { get; set; }
}
反序列化的報告後,我初始化實例:
dynamic d = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("XiaomiSmartHome.Equipement." + read.model);
但創建數據部分,我反序列化報告裏的數據:
dynamic data2 = JsonConvert.DeserializeObject<dynamic>(read.data);
我想這個數據是正確的報告類。我想:
d.report = data2;
但最高審計機關,這是不可能的Newtonsoft.Json.Linq.JObject轉換爲XiaomiSmartHome.Equipement.Report
所以我的方式來處理,這是正確的?以及如何將數據部分反序列化爲正確的報告?
謝謝!
您可以接受你自己的答案。 –