2012-02-24 153 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); 
      } 
     } 
    } 
});