获取“的JSON请求太大,反序列化”获取“的JSON请求太大,反序列化”(Getting “The

2019-05-17 13:30发布

我得到这个错误:

该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次“中国”,我想将它发送到服务器保存。 出现此错误。

我应该怎么做才能解决这个问题?

Answer 1:

你必须在调整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值供应商工厂的线程 。



Answer 2:

如果你不希望在web配置更改全局设置

使用全局设置将激活您的整个应用程序大JSON响应这可能会打开你到服务拒绝攻击。

如果几个选择的地点是允许这一点,你可以使用内容的方法,像这样很快用另一个JSON串行器:

using Newtonsoft.Json;

// ...

public ActionResult BigOldJsonResponse() 
{
    var response = ServiceWhichProducesLargeObject();
    return Content(JsonConvert.SerializeObject(response));
}
// ...


文章来源: Getting “The JSON request was too large to be deserialized”