如何在JsonResult MVC中反序列化json List <string>数据</string>

时间:2014-02-15 18:27:41

标签: c# json

我正在尝试将json字符串反序列化为MyModel,但是从我的Ajax获取“Error”:

$.ajax({
                    type: 'POST',
                    traditional: true,
                    url: '/Employee/Extract',
                    data: {data: arrToServer},
                    dataType: 'json',
                    success: function (result) {
                        alert("good");
                    },
                    error: function(result) {
                        alert("Error");
                    }
                });

我的json是:“[{\"CategoryId\":\"1\",\"EnteredDate\":\"15.02.2014\",\"SystemDate\":\"15.02.2014\",\"EmpId\":\"1\",\"ProductId\":\"9\"},{\"CategoryId\":\"1\",\"EnteredDate\":\"15.02.2014\",\"SystemDate\":\"15.02.2014\",\"EmpId\":\"1\",\"ProductId\":\"9\"},{\"CategoryId\":\"1\",\"EnteredDate\":\"15.02.2014\",\"SystemDate\":\"15.02.2014\",\"EmpId\":\"1\",\"ProductId\":\"9\"}]"

我的JsonResult:

[HttpPost]
        public JsonResult Extract()
        {
List<string> myDeserializedObjList = (List<string>)Newtonsoft.Json.JsonConvert.DeserializeObject(Request["data"], typeof(List<string>));
            return Json("111");
        }
or get a "Good" when my JsonResult is empty:
public JsonResult Extract(List<string> data)
        {
            return Json("111");
        }

我的模特:

public class MyModel
{
    public int CategoryId { get; set; }
    public string EnteredDate { get; set; }
    public string SystenDate { get; set; }
    public int EmpId { get; set; }
    public int ProductId { get; set; }
}

3 个答案:

答案 0 :(得分:0)

您应该使用List<MyModel>代替List<string>

答案 1 :(得分:0)

您的代码中有两个错误。

  1. 操作中的参数类型应为List<MyModel>,而不是List<string>
  2. jQuery.ajax中的ContentType应为application / json。
  3. 默认情况下jQuery.ajax contentType是application / x-www-form-urlencoded。这意味着在url字符串中发送的参数。您应该将jQuery.ajax中的contentType更改为application / json,并使用JSON.stringify将您的js对象转换为json:

    $.ajax({
        type: 'POST',
        traditional: true,
        url: '/Employee/Extract',
        contentType: 'application/json',
        dataType: 'json',
        data: JSON.stringify({data: arrToServer}),        
        success: function (result) {
            alert("good");
        },
        error: function(result) {
            alert("Error");
        }
    });
    

答案 2 :(得分:0)

您无需手动执行JSON反序列化。 ASP.NET MVC运行时将为您完成。您将需要进行一些更正/更改:

首先让你的ajax调用正确。定义contentType并正确传递数据数组。

$.ajax({
                type: 'POST',
                traditional: true,
                url: '/Employee/Extract',
                data: JSON.stringify(arrToServer), // stringify array
                dataType: 'json',
                contentType: 'application/json',   // define content type
                success: function (result) {
                    alert("good");
                },
                error: function(result) {
                    alert("Error");
                }
            });

在您的控制器上,您只需通过参数获取数据:

    [HttpPost]
    public JsonResult<string> Extract(MyModel[] modelArray)
    {
        // voila! , modelArray has contents you passed from JavaScript
        return Json("111");
    }