我正在尝试将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; }
}
答案 0 :(得分:0)
您应该使用List<MyModel>
代替List<string>
。
答案 1 :(得分:0)
您的代码中有两个错误。
List<MyModel>
,而不是List<string>
。jQuery.ajax
中的ContentType应为application / json。默认情况下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");
}