1

REST サービスから ajax リクエストへのレスポンスとして大きなバイト配列を送信する必要があります。次のようにリストを作成しています:

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、合計カウントはlist503 で、最初の 502 にはそれぞれ 1000 カウントがあり (これは になりますinnerList)、503 番目の子リストには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気が付くと、それぞれが(!) キーを持つ jsondatasuccessコレクションとして入っています。最初のjson でキーを取得することになっていたと思いますが、503 番目の json でのみ 54 のキーを取得する必要がありました。何か不足していますか?503541000502data

4

1 に答える 1

2

innerList 最後に54バイトの長さの同じインスタンスを使用するためです。新しいインスタンスを作成してみてください。

たとえば、の代わりに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();
于 2013-04-12T06:37:38.633 に答える