序列化或反序列化期间出错。 JSON JavaScriptSerializer

时间:2016-08-04 15:24:57

标签: javascript c# json serialization

我正在尝试从我的数据库中检索图像,可以很好地处理小图像,但是当我尝试使用Windows 7默认图像(沙漠,考拉,企鹅,郁金香等)时,它不起作用我得到了这个错误:

  

“使用JSON进行序列化或反序列化时出错   JavaScriptSerializer。字符串的长度超过了设置的值   在maxJsonLength属性上。“

我用以下方法修改我的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;
}

然后我将这个javascript函数与ajax一起使用:

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

我能做些什么来解决这个问题?我什么都不知道。

编辑:1张图片正常工作,当我尝试显示多张图片时出现问题

1 个答案:

答案 0 :(得分:1)

尝试通过您创建的实例设置最大JSON长度,如下所示:

js.MaxJsonLength = Int32.MaxValue;

看看这是否有所不同,你试图推进它的物体有多大? JSON在大型对象列表中表现不佳,可能更容易通过AJAX延迟加载它们。如果您查看大型图库,它们往往会显示加载图像,而后台则会检索下一个项目的特定对象,等等。