当我期望一条记录是 json 数据的倒数第二条记录时,我会收到多条记录。
有人对我可能做错了什么有任何建议吗?
示例数据:
{
"timestamp":"2017-03-17T17:33:09.156Z",
"dataFrame":"VGVtcDoyOC43MA==",
"fcnt":318,
"port":2,
"rssi":-107,
"snr":0.8,
"sf_used":7,
"id":1489771989156,
"decrypted":true
},
{
"timestamp":"2017-03-17T17:33:16.614Z",
"dataFrame":"SHVtOjQzLjA0",
"fcnt":319,
"port":2,
"rssi":-108,
"snr":2.8,
"sf_used":7,
"id":1489771996614,
"decrypted":true
}
法典:
public ActionResult pir()
{
List<PIRDetailsViewModel> model = new List<PIRDetailsViewModel>();
model.AddRange(getPirDetails("0000acfffe588041"));
model = model.OrderByDescending(x => x.UpdatedTime).ToList();
return View(model);
}
private List<PIRDetailsViewModel> getPirDetails(string deviceID)
{
List<PIRDetailsViewModel> model = new List<PIRDetailsViewModel>();
try
{
WebRequest req = WebRequest.Create(@"https:example.com");
req.Method = "GET";
req.Headers["Authorization"] = "Basic " + "password==";
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
var encoding = resp.CharacterSet == "" ? Encoding.UTF8 : Encoding.GetEncoding(resp.CharacterSet);
using (var stream = resp.GetResponseStream())
{
var reader = new StreamReader(stream, encoding);
var responseString = reader.ReadToEnd();
List<PIRDetail> Pirs = Newtonsoft.Json.JsonConvert.DeserializeObject <List<PIRDetail>>(responseString);
foreach (var item in Pirs)
{
byte[] data = Convert.FromBase64String(item.dataFrame.ToString());
PIRDetailsViewModel binModel = new PIRDetailsViewModel();
binModel.deviceid = deviceID;
binModel.status = Convert.ToString(Encoding.UTF8.GetString(data).Substring(4));
binModel.UpdatedTime = TimeZoneInfo.ConvertTimeFromUtc(item.timestamp, TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")).ToString();
model.Add(binModel);
}
}
}
catch (Exception Ex)
{
}
return model;
}
上面的代码只返回多条记录,但我正在尝试获取每次运行此代码时返回的倒数第二条记录。
我正在重写。 根据评论,我认为您想要更多类似以下内容的内容(不需要循环(:
List<PIRDetail> Pirs = Newtonsoft.Json.JsonConvert.DeserializeObject <List<PIRDetail>>(responseString);
var item = Pirs[Pirs.Count -2];
byte[] data = Convert.FromBase64String(item.dataFrame.ToString());
PIRDetailsViewModel binModel = new PIRDetailsViewModel();
binModel.deviceid = deviceID;
binModel.status = Convert.ToString(Encoding.UTF8.GetString(data).Substring(4));
binModel.UpdatedTime = TimeZoneInfo.ConvertTimeFromUtc(item.timestamp, TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")).ToString();
model.Add(binModel);