私のホームオートメーションシステムでは、ドキュメントを使用してプラグインを作成するために、クラスを要約とともに使用する必要があります。C#を動的クラスにデシリアライズ
私のプラグインは、センサーについての情報を得るために私のxiaomiゲートウェイと話します。だから、 "sensor_ht"、 "magnet"、 "motion"のような異なるタイプのセンサーがあります。
センサーごとに、共通の所有権と異なるデータ部分があります。私はジョンの各センサーのステータスを取得します。例えば
:
{"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 data2 = JsonConvert.DeserializeObject<dynamic>(read.data);
私は、このデータが右レポートクラスになりたいです。
d.report = data2;
しかし、それはので、これを処理する私の方法が正しいXiaomiSmartHome.Equipement.Report
にNewtonsoft.Json.Linq.JObjectを変換することは不可能だとサイス:私が試しましたか?また、データ部分を正しいレポートにデシリアライズする方法はありますか?
ありがとうございました!
あなたはあなた自身の答えを受け入れることができます。 –