将JSON发布到MVC控制器

时间:2017-05-12 20:21:02

标签: c# json asp.net-mvc

我看过各种问题和答案,但我只是部分成功。

View正在传递此JSON:

{JsonInput: [["208-01", "003158"]], JobNumber: "test"}

$.ajax({
   type: "POST",
   url: "/Dash/SavePickups",
   contentType: 'application/json',
   dataType: "json",
   data: JSON.stringify({
       JsonInput: final,
       JobNumber:"test"
       }),

上面的Json String将发送到/ Dash / SavePickups

的控制器
  [System.Web.Http.Route("Dash/SavePickups/{JsonInput}")]
    public JsonResult SavePickups(object[][] JsonInput)
    {
        var FailResult = new { Success = "False", Message = "Error" };
        var SuccessResult = new { Success = "True", Message = "Pickups Scheduled Successfully." };

       return Json(SuccessResult, JsonRequestBehavior.AllowGet);

    } 

只有部分JSON字符串传递给JsonInput。 在Debug中,我看到了JsonInput对象,Obj数组为208-01和003158.

为什么不包含JobNumber,我可以在chrome Network POST中看到它发送给控制器的JSON字符串的一部分..

2 个答案:

答案 0 :(得分:4)

继续maccettura的回答 - 你的问题是将JSON反序列化为一个对象。您给定的JSON格式为     {JsonInput:[“1234”,“5667”],JobNo:“Test”}

其中有一个可能的数据结构

List<string> , String 

不会反序列化为'sqaure'对象,例如

object [][]

我建议为你的json制作一个如下所示的模型:

 public class SavePickupsModel 
{
     public List<string> JsonInput {get; set;}
     public string JobNo {get; set; }
}

然后使用该模型作为方法的输入:

[HttpPost]
[System.Web.Http.Route("Dash/SavePickups/{JsonInput}")]
public JsonResult SavePickups(SavePickupsModel JsonInput)
{
    var FailResult = new { Success = "False", Message = "Error" };
    var SuccessResult = new { Success = "True", Message = "Pickups Scheduled Successfully." };

   return Json(SuccessResult, JsonRequestBehavior.AllowGet);

} 

答案 1 :(得分:1)

我首先使用[HttpPost]属性

标记您的控制器
[HttpPost]
[System.Web.Http.Route("Dash/SavePickups/{JsonInput}")]
public JsonResult SavePickups(object[][] JsonInput)
{

}

我还要指出,您的操作参数(object[][] JsonInput)对我来说不合适。您可能会发现json没有反序列化为该对象类型。