2012-02-24 107 views
0

我有一个MVC操作方法,我从中返回数据,如下图所示。阅读Json数据

操作方法

[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; } 
    } 

感谢

+0

你能后的JSON的样子是什么时候回来? – spinon 2012-02-24 07:54:19

+0

结果(上图)是返回的json。你是否希望我发布操作方法中构建的数据? – San 2012-02-24 07:57:08

+0

是的,我只是无法弄清楚图像中的外观。我也希望看到它是如何组织的。像文字JSON字符串一样。 – spinon 2012-02-24 07:58:34

回答

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); 
      } 
     } 
    } 
});