2013-04-12 68 views
1

我需要發送大字節數組作爲REST服務對ajax請求的響應。我創建的列表如下:在Ajax請求中獲取不正確的json響應

List<List<Byte>> list = new List<List<byte>>(); 

這裏,內部列表將有1000個字節。這是代碼:

int cnt = 0; 
List<Byte> innerList = new List<Byte>(); 

for (int i = 0; i < fileBytes.Length; i++) 
{ 
    if (cnt < 1000) 
    { 
     Byte b = fileBytes[i]; 
     innerList.Add(b); 
     cnt++; 
     if (i == fileBytes.Length - 1) 
     { 
      list.Add(innerList); 
         log.Debug("Remaining:"); 
         log.Debug("List: " + list.Count); 
         log.Debug("innerList: " + innerList.Count); 
     } 
    } 
    else 
    { 
     list.Add(innerList); 
       log.Debug("Remaining:"); 
       log.Debug("List: " + list.Count); 
       log.Debug("innerList: " + innerList.Count); 
     innerList.Clear(); 
     cnt = 0; 
    } 
} 

return list; 

現在,根據log,我的list爲503總計數,與第一502具有1000計數的每個(這將是innerList)在503'th &,子列表包含54字節。

這是我的Ajax請求:

$.ajax({ 
       type: "GET", 
       dataType: "jsonp", 
       contentType: "jsonp", 
       data: dd, 
       crossDomain: true, 
       jsonp: "callback", 
       url: "http://xxx.xxx.xxx.xx/MyWebService/WebService.svc/MyMethod", 
       success: function (data) { 
        console.log(data); 
       }, 
       complete: function (request, textStatus) { //for additional info 
        alert(request.responseText); 
        alert(textStatus); 
       }, 
       error: function(request, textStatus, errorThrown) { 
        alert(textStatus); 
        } 
      }); 

的請求被成功完成,但在firebug我注意到,我得到datasuccess503 jsons各有54領取鑰匙(!)。我認爲我應該得到1000鑰匙在第一個502 jsons在data &只在503'我可以得到54個鑰匙。我錯過了什麼?

回答

2

因爲您使用的末尾長度爲54個字節的相同實例innerList。嘗試創建新的實例。

例如,而不是innerList.Clear();,嘗試innerList = new List<Byte>();


編輯

既然你傳文件的內容爲JSON,我想表現不是你的主要關注。 如果是這樣,你可以使用下面的Linq(帶有副作用),這是更短,更容易出錯

int cnt = 0; 
List<List<byte>> chunks = fileBytes 
          .GroupBy(x => cnt++/1000) 
          .Select(x => x.ToList()) 
          .ToList();