首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取“JSON请求太大,无法反序列化”

获取“JSON请求太大,无法反序列化”
EN

Stack Overflow用户
提问于 2012-06-10 12:15:37
回答 2查看 91.1K关注 0票数 219

我得到了这个错误:

请求太大,无法反序列化。

这是一个发生这种情况的场景。我有一类国家,有该国的航运港口列表。

代码语言:javascript
复制
public class Country
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Port> Ports { get; set; }
}

我在客户端使用KnockoutJS进行级联下拉。我们有一个包含两个下拉列表的数组,第一个是国家,第二个是那个国家的港口。

到目前为止,一切都很好,下面是我的客户端脚本:

代码语言:javascript
复制
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“,我想将其发送到服务器进行保存。出现错误。

我该怎么做才能纠正这个问题呢?

EN

回答 2

Stack Overflow用户

发布于 2019-04-03 21:26:57

如果您不想更改web配置中的全局设置

使用全局设置将在整个应用程序中激活大型json响应,这可能会使您面临拒绝服务攻击。

如果允许几个选择位置,您可以使用Content方法快速使用另一个json序列化程序,如下所示:

代码语言:javascript
复制
using Newtonsoft.Json;

// ...

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

Stack Overflow用户

发布于 2021-09-14 19:30:15

设置并不总是有效的。处理这个问题的最好方法是通过控制器,您必须编写自己的Serialize JSON方法。这就是我如何解决将一个非常大的json序列化对象作为对jquery .Ajax调用的响应返回的问题。

C#:用ContentResult替换JsonResult数据类型

代码语言:javascript
复制
// GET: Manifest/GetVendorServiceStagingRecords
[HttpGet]
public ContentResult GetVendorServiceStagingRecords(int? customerProfileId, int? locationId, int? vendorId, DateTime? invoiceDate, int? transactionId, int? transactionLineId)
{
    try
    {
        var result = Manifest.GetVendorServiceStagingRecords(customerProfileId, locationId, vendorId, invoiceDate, null, null, transactionId, transactionLineId);
        return SerializeJSON(result);
    }
    catch (Exception ex)
    {
        Log.Error("Could not get the vendor service staging records.", ex);

        throw;
    }
}

private ContentResult  SerializeJSON(object toSerialize)
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    serializer.MaxJsonLength = Int32.MaxValue; // Wahtever max length you want here
    var resultData = toSerialize; //Whatever value you are serializing
    ContentResult result = new ContentResult();
    result.Content = serializer.Serialize(resultData);
    result.ContentType = "application/json";
    return result;
}

然后在Web.config文件中增加到最大大小

代码语言:javascript
复制
<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="999999999" />
    </webServices>
  </scripting>
</system.web.extensions>

这对我很有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10966328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档