【问题标题】:Model not supported for deserialization模型不支持反序列化
【发布时间】:2013-07-16 20:09:36
【问题描述】:

我在尝试解码 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; }
    }
}

【问题讨论】:

  • 抱歉这个可怜的问题。刚刚修好了。
  • 你能调试它并将jsonObj字符串的内容发布到控制器端吗?
  • 你是否传递了你的数据:JSON.stringfy(/*myDataToSend*/)?
  • @Fals 感谢您的所有回复。我没有将 JSON 对象转换为字符串。使用 JSON.stringfy(/*myDataToSend*/) 后,我能够在控制器中获取发布的数据。请张贴一个遮阳篷,以便我接受。
  • @GuilhermeLongo 欢迎您!我以 awnsear 的身份发布!

标签: c# json asp.net-mvc-4


【解决方案1】:

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

data = JSON.stringfy(/*myDataToSend*/)

【讨论】:

    【解决方案2】:

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

       List<PesquisaModel> list = new JavaScriptSerializer().Deserialize<List<PesquisaModel>>(jsonObj);
       PesquisaModel.pesquisaClienteListModel items = new PesquisaModel.pesquisaClienteListModel() { item = list };
    

    【讨论】:

    • 不知道它是否对原始海报有所帮助,但解决了我的问题,干杯:)
    【解决方案3】:

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

    public ActionResult dataSetClientes(PesquisaModel jsonObj)
    {
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 2014-06-30
      • 2014-01-23
      • 2014-10-28
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多