我有一个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);
}
结果保存文本区域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; }
}
由于
答案 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);
}
}
}
});