我正在使用RestSharp来反序列化JSON字符串。但是,我陷入了非标准结构:“000000001409026”,“000000001364365”,“869103022800595”。
数字000000001409026,000000001364365,869103022800595是gps设备的Id编号,因此JSON响应中可能有一个或多个Id编号。使用RestSharp对Web服务进行查询时获得的文件如下:
{
"status": 200,
"data": [
{
"000000001409026": {
"Fecha": "2018-01-26",
"Kilometros": "84.17",
"Odometro": "8,292.27",
"Horas": "3.18"
}
},
{
"000000001364365": {
"Fecha": "2018-01-26",
"Kilometros": "0.00",
"Odometro": "0.00",
"Horas": "0.00"
}
},
{
"869103022800595": {
"Fecha": "2018-01-26",
"Kilometros": "0.00",
"Odometro": "0.00",
"Horas": "0.00"
}
}
]
}
我正在使用的课程如下:
public class GpsOdometro
{
public string Fecha { get; set; }
public string Kilometros { get; set; }
public string Odometro { get; set; }
public string Horas { get; set; }
}
public class GpsEquipo
{
public Dictionary<string,GpsOdometro> GpsOdometro { get; set; }
}
public class RootObject
{
public string status { get; set; }
public List<GpsEquipo> data { get; set; }
}
然后我反序列化获得的json,但是当我想在datagridview中显示它时,数据不会显示。
IRestResponse json = client.Execute(request);
RootObject result = JsonConvert.DeserializeObject<RootObject>(json.Content);
DgOdometro.DataSource = result.data;
我需要帮助来正确处理这个json结构并获取gps数据。 感谢您的帮助。
答案 0 :(得分:0)
DeserializeObject
在data
中列出3个列表,但这些列表中的词典为null
。您可以从json中获取数据以逐一填充它们
RootObject result = JsonConvert.DeserializeObject<RootObject>(json.Content);
JToken dataToken = JObject.Parse(json.Content).SelectToken("data");
int i = 0;
foreach (JProperty property in dataToken.Children().SelectMany(child => ((JObject)child).Properties()))
{
result.data[i++].GpsOdometro =
new Dictionary<string, GpsOdometro>
{
{ property.Name, JObject.Parse(o2.ToString()).SelectToken(property.Path).ToObject<GpsOdometro>() }
};
}