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
所以我的方式来处理,这是正确的?以及如何将数据部分反序列化为正确的报告?
谢谢!
您可以接受你自己的答案。 –