如何在 C# 的 JSON 数据中按日期时间元素获取和存储倒数第二个订单



当我期望一条记录是 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);

最新更新