serializar - recorrer json c#
Deserializando JSON con nombres de objetos desconocidos (1)
Parece que deberías poder deshacerte de tu clase de Measures
. En su lugar, coloque el diccionario directamente en su clase de Body
:
public class Body
{
public string _id { get; set; }
public Place place { get; set; }
public int mark { get; set; }
public Dictionary<string, SingleModule> measures { get; set; }
public string[] modules { get; set; }
}
Como asunto aparte, recomiendo seguir los convenios de nomenclatura de .NET para sus propiedades, y usar [JsonProperty("measures")]
etc. para indicarle a Json.NET cómo traducir sus propiedades en JSON.
Estoy tratando de deserializar una respuesta JSON de una API. El JSON se ve así (las direcciones MAC y la ubicación están alteradas):
{
"body" : [{
"_id" : "da:87:54:26:53:97",
"place" : {
"location" : [-23.334961, 47.398349],
"altitude" : 30,
"timezone" : "Europe//London"
},
"mark" : 3,
"measures" : {
"f2:bf:a7:6f:e7:e8" : {
"res" : {
"1469997248" : [20.4, 66]
},
"type" : ["temperature", "humidity"]
},
"42:b7:48:59:7c:4b" : {
"res" : {
"1469997263" : [1016.7]
},
"type" : ["pressure"]
}
},
"modules" : ["f2:bf:a7:6f:e7:e8"]
}
],
"status" : "ok",
"time_exec" : 0.034152030944824,
"time_server" : 1469997417
}
El problema es el bloque de medidas. Como el nombre del objeto está cambiando, no sé cómo deserializarlo correctamente en un objeto C #. Encontré un problema similar aquí con la solución para usar un dictonary ; sin embargo, si lo intento de esta manera, obtengo un directorio nulo.
Este es mi método de deserialización:
APIResponse apiResponse = JsonConvert.DeserializeObject<APIResponse>(await content.ReadAsStringAsync());
Y esta es la clase APIResponse:
public class APIResponse
{
public Body[] body { get; set; }
public string status { get; set; }
public float time_exec { get; set; }
public int time_server { get; set; }
}
public class Body
{
public string _id { get; set; }
public Place place { get; set; }
public int mark { get; set; }
public Measures measures { get; set; }
public string[] modules { get; set; }
}
public class Place
{
public float[] location { get; set; }
public float altitude { get; set; }
public string timezone { get; set; }
}
public class Measures
{
public Dictionary<string, SingleModule> singlemodules{ get; set; }
}
public class SingleModule
{
public Res res { get; set; }
public string[] type { get; set; }
}
public class Res
{
public MeasuredData measuredData { get; set; }
}
public class MeasuredData
{
public float[] values { get; set; }
}
¿Hay alguna manera de deserializar las medidas fácilmente?