C # jsonконвертировать.DeserializeObject возвращает нулевые значения для массива объектов json

#c# #json #class #serialization #json.net

#c# #json #класс #сериализация #json.net

Вопрос:

У меня есть строка JSON, которую я хочу десериализовать в объекте C #

JSON — это массив объектов с пятью одинаковыми объектами без имен.

Когда я пытаюсь выполнить десериализацию с помощью команды:

JsonConvert.DeserializeObject<List<Model.AuxilioEmergencial>>(restResponse.Content);

Я получаю список с пятью объектами, но все они равны нулю: Печать отладчика Visual Studio

взгляните в JSON:

 [
    {
        "id": 1,
        "mesDisponibilizacao": "06/2020",
        "beneficiario": 
        {
            "nis": "123",
            "nome": "JONI MITCHELL",
            "multiploCadastro": false,
            "cpfFormatado": "***.862.400-**"
        },
    "responsavelAuxilioEmergencial": 
        {
            "nis": "123",
            "nome": "JONI MITCHELL",
            "nomeSemAcento": "JONI MITCHELL",
            "cpfFormatado": "***.862.400-**"
        },
    "municipio": 
        {
            "codigoIBGE": "123",
            "nomeIBGE": "LAST TIME I SAW RICHARD",
            "nomeIBGEsemAcento": "LAST TIME I SAW RICHARD",
            "pais": "BRASIL",
            "uf": 
            {
                "sigla": "RS",
                "nome": "RIO GRANDE DO SUL"
            }
        },
    "valor": 10
    },
    {
        "id": 2,
        "mesDisponibilizacao": "06/2020",
        "beneficiario": 
        {
            "nis": "123",
            "nome": "JONI MITCHELL",
            "multiploCadastro": false,
            "cpfFormatado": "***.862.400-**"
        },
    "responsavelAuxilioEmergencial": 
        {
            "nis": "123",
            "nome": "JONI MITCHELL",
            "nomeSemAcento": "JONI MITCHELL",
            "cpfFormatado": "***.862.400-**"
        },
    "municipio": 
        {
            "codigoIBGE": "123",
            "nomeIBGE": "LAST TIME I SAW RICHARD",
            "nomeIBGEsemAcento": "LAST TIME I SAW RICHARD",
            "pais": "BRASIL",
            "uf": 
            {
                "sigla": "RS",
                "nome": "RIO GRANDE DO SUL"
            }
        },
    "valor": 10
    },
    {
        "id": 3,
        "mesDisponibilizacao": "06/2020",
        "beneficiario": 
        {
            "nis": "123",
            "nome": "JONI MITCHELL",
            "multiploCadastro": false,
            "cpfFormatado": "***.862.400-**"
        },
    "responsavelAuxilioEmergencial": 
        {
            "nis": "123",
            "nome": "JONI MITCHELL",
            "nomeSemAcento": "JONI MITCHELL",
            "cpfFormatado": "***.862.400-**"
        },
    "municipio": 
        {
            "codigoIBGE": "123",
            "nomeIBGE": "LAST TIME I SAW RICHARD",
            "nomeIBGEsemAcento": "LAST TIME I SAW RICHARD",
            "pais": "BRASIL",
            "uf": 
            {
                "sigla": "RS",
                "nome": "RIO GRANDE DO SUL"
            }
        },
    "valor": 40
    },
    {
        "id": 4,
        "mesDisponibilizacao": "06/2020",
        "beneficiario": 
        {
            "nis": "123",
            "nome": "JONI MITCHELL",
            "multiploCadastro": false,
            "cpfFormatado": "***.862.400-**"
        },
    "responsavelAuxilioEmergencial": 
        {
            "nis": "123",
            "nome": "JONI MITCHELL",
            "nomeSemAcento": "JONI MITCHELL",
            "cpfFormatado": "***.862.400-**"
        },
    "municipio": 
        {
            "codigoIBGE": "123",
            "nomeIBGE": "LAST TIME I SAW RICHARD",
            "nomeIBGEsemAcento": "LAST TIME I SAW RICHARD",
            "pais": "BRASIL",
            "uf": 
            {
                "sigla": "RS",
                "nome": "RIO GRANDE DO SUL"
            }
        },
    "valor": 40
    },
    {
        "id": 5,
        "mesDisponibilizacao": "06/2020",
        "beneficiario": 
        {
            "nis": "123",
            "nome": "JONI MITCHELL",
            "multiploCadastro": false,
            "cpfFormatado": "***.862.400-**"
        },
    "responsavelAuxilioEmergencial": 
        {
            "nis": "123",
            "nome": "JONI MITCHELL",
            "nomeSemAcento": "JONI MITCHELL",
            "cpfFormatado": "***.862.400-**"
        },
    "municipio": 
        {
            "codigoIBGE": "123",
            "nomeIBGE": "LAST TIME I SAW RICHARD",
            "nomeIBGEsemAcento": "LAST TIME I SAW RICHARD",
            "pais": "BRASIL",
            "uf": 
            {
                "sigla": "RS",
                "nome": "RIO GRANDE DO SUL"
            }
        },
    "valor": 50
    }    
]
 

и мой класс C #

  [public class AuxilioEmergencial 
{
    public  Auxilio[] auxilio { get; set; }

}
public class Auxilio
{
    public int id { get; set; }
    public string mesDisponibilizacao { get; set; }
    public Beneficiario beneficiario { get; set; }
    public Responsavelauxilioemergencial responsavelAuxilioEmergencial { get; set; }
    public DadosMunicipio municipio { get; set; }
    public float valor { get; set; }
}
public class Beneficiario
{
    public string nis { get; set; }
    public string nome { get; set; }
    public bool multiploCadastro { get; set; }
    public string cpfFormatado { get; set; }
}
public class Responsavelauxilioemergencial
{
    public string nis { get; set; }
    public string nome { get; set; }
    public string nomeSemAcento { get; set; }
    public string cpfFormatado { get; set; }
}
public class DadosMunicipio
{
    public string codigoIBGE { get; set; }
    public string nomeIBGE { get; set; }
    public string nomeIBGEsemAcento { get; set; }
    public string pais { get; set; }
    public UF uf { get; set; }
}
public class UF
{
    public string sigla { get; set; }
    public string nome { get; set; }
}]
 

Ответ №1:

Когда вы делаете

 JsonConvert.DeserializeObject<List<Model.AuxilioEmergencial>>(restResponse.Content);
 

Вы сообщаете десериализатору, что вам нужен a List , где каждый элемент имеет тип AuxilioEmergencial .

Ваш класс AuxilioEmergencial имеет 1 свойство auxilio , что означает, что каждый объект в массиве JSON должен обладать этим свойством для правильной десериализации. Например.:

 [
  {
    "auxilio": {
      "id ": 1,
      "mesDisponibilizacao": "06/2020",
      ...
    }
  },
  {
    "auxilio": {
      ...
    }
  }
]     
 

На самом деле вы хотите:

 JsonConvert.DeserializeObject<List<Model.Auxilio>>(restResponse.Content);
 

Комментарии:

1. Я чувствую себя немного глупо, хахаха, но большое вам спасибо!! Это сработало 🙂