如何反序列化C#列表对象并迭代它以解析Ajax成功响应中的值

时间:2014-01-04 22:39:21

标签: c# jquery ajax json

我通过AJAX调用一个动作方法并返回一个列表对象,我很难在JQuery中反序列化响应。我尝试通过$ .each函数迭代repsone,但我得到NULL。我肯定知道返回的数据包含一个对象。

    [HttpPost]
    public JsonResult ToolTips(string viewName)
    {
        List<ToolTipMvc.Models.ToolTipMvcModel> result = ToolTipMvc.Models.ToolTipMvcModel.GetToolTip(viewName);
        var y = result;

        JavaScriptSerializer jss = new JavaScriptSerializer();

        string output = jss.Serialize(result);

        return Json(output);
    }

public static List<ToolTipMvcModel> GetToolTip(string viewName)
{
    List<ToolTipMvcModel> items = new List<ToolTipMvcModel>();
    //items.AddRange(toolTipIds.Select(s => GetToolTip(s)));

    ToolTip tp = new ToolTip();

    ToolTipMvcModel item = new ToolTipMvcModel();
    item.Description = "list item 1";
    item.Field = "ctrlOne";

    ToolTipMvcModel item2 = new ToolTipMvcModel();
    item.Description = "list item 2";
    item.Field = "ctrlTwo";

    items.Add(item);

    return items;
}  
$.ajax({
        type: 'POST',
        url: toolTipsUrl,
        cache: false,
        datatype: "html",
        data: { viewname: "runCreate" },
        success: function (data) {

alert(data);

                        data = JSON.parse(data);
                        alert(data);
                        $.each(data, function (dt) {

                            var mydata = data.Field;

                            alert(mydata);

                        });

}

修改

当我提醒数据时,我看到了例如返回的JSON

[{“Field:”ctrlTwo“,”Description“:”List item 2“},{”Field:“ctrlTwo”,“Description”:“List item 2”}]

但是当我使用JSON.Parse(数据)或$ .parseJson(数据)时,我看到了对象对象。我只是想通过并填充页面上的一些文本区域

1 个答案:

答案 0 :(得分:2)

首先,没有必要自己明确使用JavaScriptSerializer。对Json的调用将为您序列化,因此请将控制器方法看起来像这样:

[HttpPost]
public JsonResult ToolTips(string viewName)
{
    List<ToolTipMvc.Models.ToolTipMvcModel> result = ToolTipMvc.Models.ToolTipMvcModel.GetToolTip(viewName);

    return Json(result);
}

这样做也意味着您不需要执行任何明确的JSON.Parse$.parseJson

success处理程序中,您应该能够按如下方式遍历结果:

success: function(data) {
    for (var i = 0; i < data.length; i++) {
        var item = data[i];
        console.log(item.Description);
        console.log(item.Field);
    }
}