возвращение двоичного изображения в json-результате показывает ошибку сериализации - PullRequest
0 голосов
/ 21 апреля 2019

Я возвращаю результат json от действия контроллера, и результат включает двоичное изображение, и я хочу показать его в виде, используя javascript.но он показывает действие Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.

, которое вызывается с использованием ajax при загрузке страницы

public ActionResult LoadBooks()
    {          
            var v = from t in db.BookTbls
                    where t.IsDisplay==true
                    select new BookVM
                    {
                        BookID=t.BookID,
                        BookName=t.BookName,
                        BookPrize=t.BookPrize,
                        BookImagepath=t.BookImagepath,
                        BinaryImage=t.BinaryImage
                    };

            List<BookVM> list = new List<BookVM>();
            foreach(var temp in v.ToList())
            {
                BookVM obj = new BookVM();
                obj.BookID = temp.BookID;
                obj.BookName = temp.BookName;
                obj.BookPrize = temp.BookPrize;
                obj.BookImagepath = temp.BookImagepath;
                var base64 = Convert.ToBase64String(temp.BinaryImage);
                var imgsrc = string.Format("data:image/jpg;base64,{0}", base64);
                obj.BImage = imgsrc;//BImage is string variable from model
                list.Add(obj);
            }          
            return Json(v.OrderBy(p => p.BookName).ToList(), JsonRequestBehavior.AllowGet);
        }

Короче говоря, я просто хочу, чтобы этот результат был виден, его даже не удастся (результат) простопоказывает ошибку консоли, упомянутую выше.

1 Ответ

0 голосов
/ 22 апреля 2019

Добро пожаловать в Stackoverflow,

Свойство MaxJsonLength не может быть неограниченным, это целочисленное свойство, по умолчанию 102400 (100k).

Вы можете установить свойство MaxJsonLength на вашем web.config: максимум, который вы можете получить, я считаю, 2147483644.

<configuration> 
   <system.web.extensions>
       <scripting>
           <webServices>
               <jsonSerialization maxJsonLength="50000000"/>
           </webServices>
       </scripting>
   </system.web.extensions>
</configuration> 

В качестве обходного пути, вы можете сделать следующее в вашем контроллере (или в любом другом месте):

var serializer = new JavaScriptSerializer();

// For simplicity just use Int32's max value.
// You could always read the value from the config section mentioned above.
serializer.MaxJsonLength = Int32.MaxValue;

var resultData = new { Value = "foo", Text = "var" };
var result = new ContentResult{
    Content = serializer.Serialize(resultData),
    ContentType = "application/json"
};
return result;

Документация Mirosoft.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...