Ich habe ein paar JSON von meinen Philips Hue-Lampen. Es sieht aus wie das.Deserialisieren von JSON in .net mit inkrementellen Ganzzahlen
{
"1": {
"state": {
"on": false,
"bri": 75,
"hue": 60309,
"sat": 192,
"effect": "none",
"xy": [
0.5002,
0.2691
],
"ct": 443,
"alert": "select",
"colormode": "xy",
"reachable": false
},
"swupdate": {
"state": "noupdates",
"lastinstall": null
},
"type": "Extended color light",
},
"2": {
"state": {
"on": true,
"bri": 254,
"hue": 38000,
"sat": 254,
"effect": "none",
"xy": [
0.1603,
0.3238
],
"ct": 153,
"alert": "select",
"colormode": "hs",
"reachable": true
},
"swupdate": {
"state": "noupdates",
"lastinstall": null
},
"type": "Extended color light",
},
"3": {
"state": {
"on": true,
"bri": 254,
"hue": 38000,
"sat": 254,
"effect": "none",
"xy": [
0.1603,
0.3238
],
"ct": 153,
"alert": "none",
"colormode": "hs",
"reachable": true
},
"swupdate": {
"state": "noupdates",
"lastinstall": null
},
"type": "Extended color light",
}
}
Wie Sie jede Lampe eine Nummer 1 hat sehen können, 2, 3 usw. für jede Lampe dem System hinzugefügt.
Wie erstelle ich ein Modell zur Deserialisierung dieser Daten? Was ich versuchte, funktioniert nicht.
using (var getclient = new HttpClient())
{
Rootobject model = new Rootobject();
string bulburl = "http://<ip>/api/<token>/lights";
Console.WriteLine($"URL: {bulburl}");
var json = await getclient.GetStringAsync(bulburl);
Console.WriteLine("Json count: " + json.ToString().Count());
model = JsonConvert.DeserializeObject<Rootobject>(json);
Console.WriteLine("model count: " + model.ToString().Count());
return View(model);
}
Und mein Objekt, das ich meist importiert. Wenn ich es direkt versuchen, den Import es spaltet es sich wie 1_ 2_ 3_ usw.
public class Rootobject
{
public BulbNumber[] bulbnumber { get; set; }
}
public class BulbNumber
{
public State[] state { get; set; }
public Swupdate swupdate { get; set; }
public string type { get; set; }
public string name { get; set; }
public string modelid { get; set; }
public string manufacturername { get; set; }
public string uniqueid { get; set; }
public string swversion { get; set; }
public string swconfigid { get; set; }
public string productid { get; set; }
}
public class State
{
public bool on { get; set; }
public int bri { get; set; }
public int hue { get; set; }
public int sat { get; set; }
public string effect { get; set; }
public float[] xy { get; set; }
public int ct { get; set; }
public string alert { get; set; }
public string colormode { get; set; }
public bool reachable { get; set; }
}
public class Swupdate
{
public string state { get; set; }
public object lastinstall { get; set; }
}
Wenn Sie debug, was bedeutet 'Modell 'aussehen, nachdem Sie Ihre' JsonConvert.DeserializeObject' tun? Du wirst nicht das bekommen, wonach du suchst, wenn du '.Count()' auf einer Zeichenkette aufruft ... – ragerory
Du kannst besser mit 'Dictionary' als 'RootObject' arbeiten. Sie sollten die IDs zu Ganzzahlen zerlegen lassen, und Sie werden dann die IDs als Ihre Schlüssel mit ihren Glühbirnen als den entsprechenden Wert haben. –
Gavin