"জেএসওন অনুরোধটি ডিসরিয়ালাইজড করার জন্য খুব বড় ছিল" পাওয়া


203

আমি এই ত্রুটিটি পাচ্ছি:

জেএসওন অনুরোধটি deserialized করা খুব বড় ছিল।

এখানে এমন একটি দৃশ্য রয়েছে যেখানে এটি ঘটে। আমার কাছে দেশের একটি শ্রেণি রয়েছে যা সেই দেশের শিপিং বন্দরগুলির একটি তালিকা ধারণ করে

public class Country
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Port> Ports { get; set; }
}

আমি ক্যাসকেডিং ড্রপ ডাউনগুলি করতে ক্লায়েন্টের পাশে নকআউটজেএস ব্যবহার করি। সুতরাং আমাদের দুটি ড্রপ ডাউনগুলির একটি অ্যারে রয়েছে, যেখানে প্রথমটি দেশ এবং দ্বিতীয়টি সেই দেশের বন্দর orts

এখন পর্যন্ত সবকিছু ঠিকঠাক চলছে, এটি আমার ক্লায়েন্টের সাইড স্ক্রিপ্ট:

var k1 = k1 || {};
$(document).ready(function () {

    k1.MarketInfoItem = function (removeable) {
        var self = this;
        self.CountryOfLoadingId = ko.observable();
        self.PortOfLoadingId = ko.observable();
        self.CountryOfDestinationId = ko.observable();
        self.PortOfDestinationId = ko.observable();  
    };

    k1.viewModel = function () {
        var marketInfoItems = ko.observableArray([]),
            countries = ko.observableArray([]),

            saveMarketInfo = function () {
                var jsonData = ko.toJSON(marketInfoItems);
                $.ajax({
                    url: 'SaveMarketInfos',
                    type: "POST",
                    data: jsonData,
                    datatype: "json",
                    contentType: "application/json charset=utf-8",
                    success: function (data) {
                        if (data) {
                            window.location.href = "Fin";
                        } else {
                            alert("Can not save your market information now!");
                        }

                    },
                    error: function (data) { alert("Can not save your contacts now!"); }
                });
            },

            loadData = function () {
                $.getJSON('../api/ListService/GetCountriesWithPorts', function (data) {
                    countries(data);
                });
            };
        return {
            MarketInfoItems: marketInfoItems,
            Countries: countries,
            LoadData: loadData,
            SaveMarketInfo: saveMarketInfo,
        };
    } (); 

চিনির মতো দেশ নির্বাচন করা হলে, সেখানে প্রচুর বন্দর রয়েছে যখন সমস্যাটি দেখা দেয় । সুতরাং আপনার অ্যারেতে যদি 3 বা 4 বার "চীন" থাকে এবং আমি এটি সংরক্ষণ করতে সার্ভারে প্রেরণ করতে চাই। ত্রুটি ঘটে।

এর প্রতিকারের জন্য আমার কী করা উচিত?


4
কারও কৌতূহলের জন্য কেন এমন হয় বা তাদের গ্রাহক সিরিয়ালাইজারটি লেখেন - জসনভ্যালিউপ্রভাইডার ফ্যাক্টরি.সি এর উত্স কোডটি একবার দেখুন - মনে হয় এএসপি।নেট এমভিসি টিম ইচ্ছাকৃতভাবে সীমাবদ্ধতা 1000 এ
রেখেছিল।

উত্তর:


401

সমস্যাটি সমাধান করার জন্য আপনাকে সর্বাধিক মানের সাথে সর্বাধিক মান সর্বাধিক সামঞ্জস্য করতে হবে web.config

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

aspnet:MaxJsonDeserializerMembersঅ্যাপসেটে এর জন্য উচ্চতর মান সেট করুন :

<appSettings>
  <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>

যদি এই বিকল্পগুলি কাজ না করে থাকে তবে আপনি এই থ্রেডে বর্ণিত JSON.NET ব্যবহার করে একটি কাস্টম জসন মান সরবরাহকারী কারখানা তৈরি করার চেষ্টা করতে পারেন ।


57
আমি এমন একটি এমভিসি 4 অ্যাপ্লিকেশন নিয়ে কাজ করছিলাম যা একটি নিয়ামককে বড় আকারের (1 কে +) জেসন অবজেক্টকে সিরিয়ালাইজ করছিল। System.web.extensions পদ্ধতিটি কিছুই করেনি, তবে অ্যাপসেটিংগুলি ছিল ম্যাজিক ফিক্স। ধন্যবাদ!
TNCodeMonkey

4
aspnet:MaxJsonDeserializerMembersআমার জন্যও কাজ করেছে। কেউ কি জানেন যে এটি আসলে নথিভুক্ত?
ম্যাট বার্ল্যান্ড

1
এমএসডিএন লিঙ্কটি নষ্ট হয়ে গেছে। সঠিক লিঙ্কটি এমএসডিএন.মাইক্রোসফট.ইন- ইউএস
ইডো রান

14
এটি আমার পক্ষে কাজ করেছে, তবে কেবল এটি খুঁজে পেয়েছে: সমর্থন . microsoft.com/kb/2661403 ... ডিফল্ট সেটিংসের উপরে এই মানটি বৃদ্ধি করা আপনার সার্ভারের নিরাপত্তা বুলেটিন এমএস 11- এ আলোচিত পরিষেবা দুর্বলতার অস্বীকারের সংবেদনশীলতা বৃদ্ধি করে- 100।
হিরো

4
Aspnet ডিফল্ট মান: MaxJsonDeserializerMembers হতে 1000 বলে মনে হয় msdn.microsoft.com/en-us/library/hh975440.aspx
ক্রিস

2

আপনি যদি ওয়েব কনফিগারেশনে কোনও বিশ্বব্যাপী সেটিংস পরিবর্তন করতে না চান

একটি বিশ্বব্যাপী সেটিংস ব্যবহার করা আপনার পুরো অ্যাপ্লিকেশন জুড়ে বৃহত্তর জসন প্রতিক্রিয়া সক্রিয় করবে যা আপনাকে পরিষেবা আক্রমণ থেকে অস্বীকার করার জন্য উন্মুক্ত করে দিতে পারে।

যদি কয়েকটি পছন্দসই অবস্থানগুলিকে এটির অনুমতি দেওয়া হয় তবে আপনি খুব তাড়াতাড়ি এই জাতীয় বিষয়বস্তু পদ্ধতি ব্যবহার করে আর একটি জসন সিরিয়ালিয়াস ব্যবহার করতে পারেন:

using Newtonsoft.Json;

// ...

public ActionResult BigOldJsonResponse() 
{
    var response = ServiceWhichProducesLargeObject();
    return Content(JsonConvert.SerializeObject(response));
}
// ...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.