首页 > 解决方案 > C# JsonConvert.DeserializeObject 返回一个 json 对象数组的空值

问题描述

我有一个 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; }
}]

标签: c#jsonclassserializationjson.net

解决方案


When you do

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

You're telling the deserializer that you want a List, where every element is of type AuxilioEmergencial.

Your class AuxilioEmergencial has 1 property auxilio, which means every object in the JSON array has to have that property to be properly deserialized. E.g.:

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

What you actually want is:

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

推荐阅读