asp.net-mvc - 獲取“JSON請求太大而無法反序列化”




knockout.js (2)

我收到這個錯誤:

JSON請求太大而無法反序列化。

這是發生這種情況的場景。 我有一個擁有該國航運港口的國家班級

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

我在客戶端使用KnockoutJS進行級聯下拉。 所以我們有兩個下拉列表,第一個是國家,第二個是該國的港口。

到目前為止,一切正常,這是我的客戶端腳本:

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次“中國”,我想把它發送到服務器保存。 發生錯誤。

我該怎麼做才能解決這個問題?


Answers

您必須在web.config maxJsonLength屬性調整為更高的值才能解決問題。

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

aspnet:MaxJsonDeserializerMembers設置更高的值aspnet:MaxJsonDeserializerMembers appSettings中的aspnet:MaxJsonDeserializerMembers

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

如果這些選項不起作用,您可以嘗試使用此thread指定的JSON.NET創建自定義json值提供程序工廠。


確保將@ Html.AntiForgeryToken()放在頁面的表單中







asp.net-mvc knockout.js