阅读Json数据

时间:2012-02-24 07:47:56

标签: jquery json asp.net-mvc-3

我有一个MVC动作方法,我将从中返回数据,如下图所示。

行动方法

[HttpPost]
public JsonResult LegalCheck(string jsonPackage)
{
    var serializer = new JavaScriptSerializer();
    var comments = serializer.Deserialize<Dictionary<string, string>>(jsonPackage.Substring(jsonPackage.IndexOf('{'), jsonPackage.LastIndexOf('}')));
    var results = MyService.GetViolations(comments, CookieManager.ClientId);
    return Json(results);
}

enter image description here

结果保存文本区域Id(CommentTextarea-1181_1183等)以及需要的数据。我如何循环结果? results.length,结果[0]显示为未定义。是否可以遍历此Json数据或者必须更改正在返回的json数据?

动作方法中的数据如下

results
Count = 2
    [0]: {[CommentTextarea_1181_1183, Mynamespace.Services.Legal[]]}
    [1]: {[CommentTextarea_1181_1184, Mynamespace.Services.Legal[]]}

]}

法律ia课程如下

 [Serializable]
    public class Legal
    {
        public string Phrase { get; set; }
        public int StartIndex { get; set; }
    }

由于

1 个答案:

答案 0 :(得分:0)

似乎MyService.GetViolations方法返回Dictionary<string, Legal[]>。 ASP.NET MVC 3用于序列化JSON响应的JavaScriptSerializer在序列化字典时不会生成javascript数组。它生成一个javascript对象。所以你不能循环,因为这个对象中的索引不是基于0的整数。

因此,为了循环,您可以枚举为对象定义的所有属性:

$.ajax({
    url: '@Url.Action("LegalCheck")',
    type: 'POST',
    success: function (result) {
        for (var prop in result) {
            if (result.hasOwnProperty(prop)) {
                // prop is the key and result[prop] is the legals array
                var legals = result[prop];

                alert('the key is ' + prop + ' and the value is ' + legals[0].Phrase);
            }
        }
    }
});