1. ホーム
  2. asp.net-mvc

[解決済み】"JSONリクエストが大きすぎてデシリアライズできませんでした "の表示について

2022-04-09 19:39:41

質問

このようなエラーが発生します。

JSON リクエストが大きすぎて、デシリアライズできません。

このような事態が発生するシナリオは次のとおりです。国というクラスがあり、その国の港のリストを保持しています。

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

クライアント側でKnockoutJSを使って、カスケード式のドロップダウンを作っています。2つのドロップダウンの配列があり、最初のドロップダウンは国、2番目のドロップダウンはその国の港を表しています。

このクライアント側のスクリプトは、今のところすべて正常に動作しています。

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回 "China"があり、それをサーバーに送って保存したい場合。エラーが発生します。

これを改善するにはどうしたらよいですか?

どのように解決するのですか?

を調整する必要があります。 maxJsonLength プロパティをより大きな値に設定します。 web.config を実行すると、問題が解決します。

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

を高く設定します。 aspnet:MaxJsonDeserializerMembers を appSettings に追加してください。

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

これらのオプションが機能しない場合は、次のように JSON.NET を使用してカスタムの json 値プロバイダー ファクトリを作成してみてください。 スレッド .