我无法在 MVC 中反序列化纬度和经度

问题描述

我正在使用 .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();
    }
}