我正在尝试反序列化来自API的JSON响应。JSON如下所示(MAC地址和位置已更改):
{ "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 }
问题在于措施措施。由于对象的名称正在更改,因此我不知道如何将其正确反序列化为C#对象。我在这里发现使用字典的解决方案存在类似问题,但是如果以这种方式尝试,我只会得到空目录。
这是我的反序列化方法:
APIResponse apiResponse = JsonConvert.DeserializeObject<APIResponse>(await content.ReadAsStringAsync());
这是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; } }
有什么方法可以轻松地适当地反序列化这些措施吗?
看来您应该可以摆脱Measures课堂教学。而是直接将字典放入您的Body班级:
Measures
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; } }
另外,我强烈建议为您的属性遵循.NET命名约定,并使用[JsonProperty("measures")]etc指示Json.NET如何将属性转换为JSON。
[JsonProperty("measures")]