1

尝试解码 Json 对象时出现此错误

错误:数组的反序列化不支持类型“realstate.Models.PesquisaModel.pesquisaClienteListModel”。

这是字符串:

JSON对象:

jsonObj=[{
"idCliente":"2",
"nome":"Guilherme Longo",
"email":"guilhermelongo@outlook.com.br",
"tipoPessoa":"1",
"observacao":"Mais conteúdo",
"rg":"435180307",
"cpf":"341.307.948-41",
"cnpj":null,
"estado":"SP",
"cidade":"Ribeirão Preto",
"logradouro":"Rua",
"endereco":"Brigadeiro Tobias de Aguiar",
"numero":"469",
"bairro":"Independência",
"complemento":"Bloco A"
},
{"idCliente":"8",
"nome":"Guilherme Longo",
...
}]

这是我面临此错误的地方:

public ActionResult dataSetClientes(string jsonObj)
{
   PesquisaModel.pesquisaClienteListModel items = new JavaScriptSerializer().Deserialize<PesquisaModel.pesquisaClienteListModel>(jsonObj);
   ...
 }

编辑1:

这是模型:

public class PesquisaModel
{

    public class pesquisaClienteModel
    {
        public string idCliente { get; set; }
        public string nome { get; set; }
        public string email { get; set; }
        public string tipoPessoa { get; set; }
        public string observacao { get; set; }
        public string rg { get; set; }
        public string cpf { get; set; }
        public string cnpj { get; set; }
        public string estado { get; set; }
        public string cidade { get; set; }
        public string logradouro { get; set; }
        public string endereco { get; set; }
        public string numero { get; set; }
        public string bairro { get; set; }
        public string complemento { get; set; }                
    }

    public class pesquisaClienteListModel
    {
        public List<pesquisaClienteModel> item { get; set; }
    }
}
4

3 回答 3

1

只有实现 IEnumerable 的类才能从 json 数组中反序列化。PesquisaModel.pesquisaClienteListModel没有。相反,请使用以下内容:

   List<PesquisaModel> list = new JavaScriptSerializer().Deserialize<List<PesquisaModel>>(jsonObj);
   PesquisaModel.pesquisaClienteListModel items = new PesquisaModel.pesquisaClienteListModel() { item = list };
于 2013-07-17T14:52:22.013 回答
1

您应该对 ajax 函数中的内容进行字符串化以使其正常工作。做这个:

data = JSON.stringfy(/*myDataToSend*/)
于 2013-07-17T14:45:34.220 回答
0

您不必进行序列化,MVC 模型绑定器将为您完成。将您的操作参数更改为您的自定义类型。

public ActionResult dataSetClientes(PesquisaModel jsonObj)
{

}
于 2013-07-17T14:47:21.783 回答