我遇到了JSON序列化的大问题。
在我的应用程序中,我使用其中一个Web API控制器定义了以下函数。
[HttpGet]
[ActionName("all")]
[Route("api/customers/all/")]
[SwaggerResponse(HttpStatusCode.InternalServerError, Type = typeof(Models.Response.ResponseError))]
[SwaggerResponse(HttpStatusCode.Forbidden, Type = typeof(Models.Response.ResponseErrorBasic))]
public Models.Response.ResponseApiList<Models.Api.Customer> GetValuesAll(DateTime? since=null)
Models.Api.Customer是一个引用几个相关对象的复杂对象。
public class Customer
{
public int Id { get;set;}
public string Name {get;set}
.....
public List<Invoices> Invoices {get;set;}
.....
.....
}
Models.Response.ResponseApiList保存返回的数据
public class ResponseApiList<T>
{
public ResponseMeta meta { get; set; } // ResponseMeta holds datetime and total records
public List<T> payload { get; set; } // Holds the Customer object
public ResponseApiList()
{
payload = new List<T>();
meta = new ResponseMeta();
}
最后,以下是WebApiConfig
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
已加载NewtonSoft.JSON库,但我不确定要查找它是否正在使用。
无论如何,问题在于性能。目前,要处理的数据库返回大约11,000条记录,但数据的总大小(根据小提琴手通知我的情况)为45Mbs。
当c#代码从函数返回时,所用的总时间约为。 4秒
然后,很长一段时间都没有。今天我在11:43开始了这个过程,它直到15:34才停止。我的测试工具是ReadyAPI(SoapUI)和Insomnia。
最终,这将转换为分页调用以减少发送的数据量,但是从Web API方法发送JSON的限制是什么?
在我进入重新编码路线之前,有没有人有办法以任何其他方式这样做?
答案 0 :(得分:0)
最终,这将转换为分页调用以减少发送的数据量,但是从Web API方法发送JSON的限制是什么?
我认为响应大小没有严格的Web-API级别限制。特别是这个问题与json-serializer无关。此极大响应方案中的限制最有可能出现在Web服务器配置级别上。 (像最大响应大小等等)。
但是这种情况的主要结论应该是 - &#34;如果json对象是45Mb大 - 出错了。&#34;