我正在尋找一種方法來創建一個接受多個類作爲值的字典。C#字典多個類作爲值
我從小米網關和各種設備中獲得價值,我已經爲每種設備上課了。
例如我的磁傳感器:
[XiaomiEquipement("magnet")]
public class Magnet
{
public string Model { get; set; } = "magnet";
public string Sid { get; set; }
public string Battery { get; set; } = "CR1632";
public int BatteryLevel { get; set; }
public MagnetReport Report { get; set; }
}
[XiaomiEquipement("magnet_report")]
public class MagnetReport
{
public int Voltage { get; set; }
public status { get; set; }
}
而且我wallplug:
[XiaomiEquipement("plug")]
public class Plug
{
public string Model { get; set; } = "plug";
public string Sid { get; set; }
public string Battery { get; set; } = "CR2450";
public int BatteryLevel { get; set; }
public PlugReport Report { get; set; }
}
[XiaomiEquipement("plug_report")]
public class PlugReport
{
public int Voltage { get; set; }
public string Status { get; set; }
}
小蜜網關發送兩個類型的數據,報告時,事情發生心跳每x分鐘。
{ 「CMD」: 「心跳」, 「模型」: 「插頭」, 「SID」: 「158d000123f0c9」, 「short_id」:11119 「數據」: 「{\」 電壓\「:3600 ,\ 「狀態\」:\ 「關\」,\ 「INUSE \」:\ 「0 \」,\ 「power_consumed \」:\ 「7 \」,\ 「load_power \」:\ 「0.00 \」}」 }
{「cmd」:「report」,「model」:「plug」,「sid」:「158d000123f0c9」,「short_id」:11119,「data」:「{\」status \「:\」 「}」}
正如你所看到的,這兩條線的數據並不相同。因此,我想在啓動插件類時,在心跳或報告到達時填寫缺失的數據。
我使用Activator.CreateInstance與傳感器類型來創建正確的類。
modelType = Assembly.GetExecutingAssembly().GetTypes().SingleOrDefault(t => t.GetCustomAttribute<Response.XiaomiEquipementAttribute>()?.Model == read.Model);
modelReportType = Assembly.GetExecutingAssembly().GetTypes().SingleOrDefault(t => t.GetCustomAttribute<Response.XiaomiEquipementAttribute>()?.Model == read.Model + "_report");
我嘗試使用字典存儲,然後我的傳感器數據來編輯連接心跳後,而且是每一個傳感器具有不同的類這是行不通的。
我嘗試添加一個接口,它的工作,但它不適用於報告類。
如何將這些類包含到我的字典中並訪問它?
基本上我想通過鍵搜索字典,獲取價值並改變它的一部分。
您是否嘗試過使用抽象類? – noone392
還是一個界面? –
此外,如果你想它是任何你可以只是使值類型的對象,然後當確定什麼類型時,只是調用object.type()並檢查 – noone392