在MVC控制器中接收JSON

时间:2017-07-10 12:18:11

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

这是我第一次使用JSON,我在控制器中解析并使用它时遇到了一些麻烦。我已经尝试过这些解决方案Unable to successfully receive JSON data to .NET MVC ControllerHow to receive JSON as an MVC 5 action method parameter,但它们都没有为我做过。

我正在从我的html中检索一些数据,并通过以下代码将数组通过ajax发送到控制器:

JQuery的:

var values = $('ul#values li').map(function() {
   return this.textContent;
}).get()

var lines = $('ul#lines li').map(function() {
    return {
       Column: this.textContent,
       Table: this.getAttribute("name")
    };
}).get();

var columns = $('ul#lines li').map(function() {
    return {
       Column: this.textContent,
       Table: this.getAttribute("name")
    };
}).get();

var filters = $('ul#filters li.panel').map(function () {

            var n = this.getAttribute("name");

            var c = $(this).children()[1].textContent;

            var r = $(this).find("li input:checked").map(function() {
                return this.parentNode.textContent;
            }).get();
            if (r.length === 0)
                return null;
            else
                return { table: n, name:c, vals: r };
        }).get();


 $.ajax({
        type: "POST",
        url: "/Home/PivotTable",
        dataType: "json",
        traditional: true,
        data: {
            indicators: values,
            lines: JSON.stringify(lines) ,
            columns:  JSON.stringify(columns),
            filters:  JSON.stringify(filters)
        },
        success: function (data) {
            alert(data.s, data.l);
        }

    });

这是发布的表单数据:

indicators:  Taxa Mensal de inflação
lines:[{"Column":"  Base","Table":"D_Base"}]
columns:[{"col":"  Trimestre","table":"D_Calendario"}]
filters:[{"table":"D_PF_ClasseProdutos","name":"  Código","vals":[" 22"," 23"]}]

在我需要访问数据的控制器中接收数据:

public JsonResult PivotTable(string[] indicators, Lines[]  lines, object[] columns, object[] filters)
        {
            string sa = indicators[0];

            var l = lines;
            var col = columns;
            var fil = filters;

            var result = new { s = sa, l=l[0].Column};
            return Json(result, JsonRequestBehavior.AllowGet);
        }

public class Lines
        {
            public string Column { get; set; }
            public string Table { get; set; }
        }

我尝试将线绑定到一个对象,就像其中一个链接中的解决方案一样,但是得到了

  

NullRefrenceException未被usercode

处理

虽然其他参数收到相应的参数 data,但我无法访问该对象的属性。

我做错了什么,如何解析数据或将其绑定到对象?

1 个答案:

答案 0 :(得分:-3)

您可以尝试使用Json.NET库,它允许您序列化和反序列化。

将你的参数作为字符串传递并执行以下操作:

Lines[] m = JsonConvert.DeserializeObject<Lines>(lines);