2016-08-04 9 views
0

私のデータベースから画像を取得しようとしていますが、小さな画像でうまく動作しますが、Windows 7のデフォルト画像(Desert、Koala、Penguins、Tulipsなど)で試しても機能しません。このエラー:シリアライズまたはデシリアライズ中にエラーが発生しました。 JSON JavaScriptSerializer

"Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property."

私はこれで私のweb.configファイルを変更します。

<scripting> 
    <webServices> 
    <jsonSerialization maxJsonLength="2147483647"/> 
    </webServices> 
</scripting> 

は私が画像を取得するために使用することは、このコードです

public static byte[] Serialize(object obj) { var binaryFormatter = new BinaryFormatter(); var ms = new MemoryStream(); binaryFormatter.Serialize(ms, obj); return ms.ToArray(); } [WebMethod] public string ObtenerImagen(int id) { DataTable dt = new DataTable(); dt = conn.consultarImagen("alertas", id); Imagenes img; List<Imagenes> lista = new List<Imagenes>(); for (int i = 0; i < dt.Rows.Count; i++) { img = new Imagenes(); img.Id = Convert.ToInt32(dt.Rows[i]["Id"]); img.FileName = dt.Rows[i]["FileName"].ToString(); img.Type = dt.Rows[i]["ContentType"].ToString(); img.Content = Convert.ToBase64String(Serialize(dt.Rows[i]["Content"])); img.IdAlerta = Convert.ToInt32(dt.Rows[i]["IdAlerta"]); img.Pie = dt.Rows[i]["PieFoto"].ToString(); //Llenado de lista lista.Add(img); img = null; } JavaScriptSerializer js = new JavaScriptSerializer(); string lineas = js.Serialize(lista); return lineas; } 

そして私は、Ajaxと、このjavascript関数を使用します。

success: function (data) { 
     var aRC = JSON.parse(data.d); 
     var lineas = ""; 

     for (var i = 0; i < aRC.length; i++) { 
      var id = aRC[i].Id; 
      var num = id; 
      var rev = aRC[i].FileName; 
      var pur = aRC[i].Type; 
      var status = aRC[i].Content; 
      var imagen = status.substring(36, status.length - 37); 
      var owner = aRC[i].IdAlerta; 
      var pie = aRC[i].Pie; 

      lineas += '<div class="col-lg-3 col-md-4 col-xs-3 thumb marco">'; 
      lineas += '<a class="thumbnail" href="#">'; 
      lineas += '<img class="responsive" src="data:image/jpeg;base64,' + imagen + '" />';      
      lineas += '<p class="text-justify" id="Pie' + i + '">' + pie + '</p>'; 
      lineas += '</a>'; 
      lineas += '<span class="btn btn-xs btn-success fa fa-pencil hidden-print" id="EditPie' + i + '"></span>'; 
      lineas += '<input type="text" class="form-control hidden hidden-print" id="PiePag' + i + '"> <span class="btn btn-xs btn-success fa fa-check hidden hidden-print" id="OkPie' + i + '"></span>'; 
      lineas += '</div>'; 
     } 
     $('#Imagenes').html(lineas); 

私はカントーこれをどう解決するのですか?私には分かりません。

EDIT:1枚の画像で細かい動作しますが、私はあなたがこのように作成したインスタンスを経由して最大JSONの長さを設定してみてください以上1枚の画像

+0

万が一、このMVCはありますか? – Santi

+0

いいえ、MVCではなく、AJAX呼び出しとJavaScriptを備えたHTMLとC#WebServiceだけです。 –

+1

ああ、私は、謝罪を参照してください。これはMVCの既知の警告で、Web.Configの 'maxJsonLength'は基本的に無視され、コード内で宣言されなければなりません。私は他の提案はしていないので、あなたの質問に答えるために他の誰かを残します。がんばろう! – Santi

答えて

1

を表示しようとすると、問題が発生します。

js.MaxJsonLength = Int32.MaxValue;

これは違いがあるかどうかを確認してください。あなたのオブジェクトがどれくらい大きく押し込まれていますか? JSONは大きなオブジェクトのリストではうまく動作せず、AJAX経由で読み込みが遅くなる場合があります。大きなギャラリーを見ると、ローディングイメージを表示する傾向があり、バックグラウンドでは、次のアイテムなどの特定のオブジェクトを検索します。

+0

私はこのコードを編集します:var js = new JavaScriptSerializer {MaxJsonLength = Int32.MaxValue}; 文字列lineas = js.Serialize(lista); 少なくとも、私は4つの画像で試してみました。ありがとう。 –

+0

それは素晴らしいです、平均を持っていますか?まったく画像のサイズは?サービスやMVCがWeb設定ファイルから無視するという印象を受けました。私は真剣に思っていますが、Ajax経由ですべての読み込みを遅延チェックアウトします。 –

+0

2MB未満です。今私は10以上の画像を試して、うまくいきます!問題は、サービスがweb.configを無視していたためです –

関連する問題