问题描述
我正在使用 .NET Core 和 API 项目将接收到的 JSON 反序列化为对象,但我不能;我总是遇到错误。
当我写
ChevacaPackets objeto = JsonConvert.DeserializeObject<ChevacaPackets>(lala);
在我调试时,应用程序爆炸了。
我的 Json 是:
{"applicationID":"2","applicationName":"CHEVACA_APP","deviceName":"Heltec_Lora_GPS_30","devEUI":"AL5dvw2Et0k=","rxInfo":[],"txInfo":{" frequency":902700000,"modulation":"LORA","loRaModulationInfo":{"bandwidth":125,"spreadingFactor":10,"codeRate":"4/5","polarizationInversion":false}},"adr ":true,"dr":0,"fCnt":12409,"fPort":2,"data":"TmioWArY/8gT","objectJSON":"{"alt":-56,"hdop":1.9,"info":"布埃纳 senal.","lat":-34.86879973821638,"lon":-56.190426122571594}","tags":{},"confirmedUplink":true,"devAddr":"ACwaOQ=="}
public class ChevacaPackets
{
public string applicationID { get; set; }
public string applicationName { get; set; }
public string deviceName { get; set; }
public string devEUI { get; set; }
//public string rxInfo { get; set; }
public bool adr { get; set; }
public int dr { get; set; }
public int fCnt { get; set; }
public int fPort { get; set; }
public string data { get; set; }
public objetoJSON objectJSON { get; set; }
//public string tags { get; set; }
public bool confirmedUplink { get; set; }
public string devAddr { get; set; }
}
public class objetoJSON
{
public int alt { get; set; }
public decimal hdop { get; set; }
public string info { get; set; }
public decimal lat { get; set; }
public decimal lon { get; set; }
}
解决方法
objectJSON 字段根本不是 JSON。引号放错地方了。
{
"applicationID": "2","applicationName": "CHEVACA_APP","deviceName": "Heltec_Lora_GPS_30","devEUI": "AL5dvw2Et0k=","rxInfo": [],"txInfo": {
"frequency": 902700000,"modulation": "LORA","loRaModulationInfo": {
"bandwidth": 125,"spreadingFactor": 10,"codeRate": "4/5","polarizationInversion": false
}
},"adr": true,"dr": 0,"fCnt": 12409,"fPort": 2,"data": "TmioWArY/8gT","objectJSON": "{" alt ":-56," hdop ":1.9," info ":" Buena senal."," lat ":-34.86879973821638," lon ":-56.190426122571594}","tags": {},"confirmedUplink": true,"devAddr": "ACwaOQ=="
}
您需要更正格式错误的 objectJSON 属性。大括号表示 JSON 中的对象。它们不应该被字符串包围。更正后的对象属性应为:
"objectJSON": { "alt":-56,"hdop":1.9,"info": "Buena senal.","lat": -34.86879973821638,"lon": -56.190426122571594 },
,
我通过删除 objectJSON 之前的引号解决了它....
这是我的代码....
public IActionResult Post( JsonDocument objectJSON ) { string jeti = objectJSON.RootElement.ToString(); 字符串 jet=Regex.Unescape(jeti); jet= jet.Replace(""{","{"); jet= jet.Replace("}"","}");
try
{
ChevacaPackets objeto = JsonConvert.DeserializeObject<ChevacaPackets>(jet);
Contexto.ChevacaPackets.Add(objeto);
Contexto.SaveChanges();
return Ok();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
return BadRequest();
}
}