C# 一种序列化方法会产生内存不足错误,而另一种则不会
仅在非常大的集合上,以下行在服务器级别的mscorlib.dll抛出OutofMemroyExceptionC# 一种序列化方法会产生内存不足错误,而另一种则不会,c#,serialization,httpresponsemessage,C#,Serialization,Httpresponsemessage,仅在非常大的集合上,以下行在服务器级别的mscorlib.dll抛出OutofMemroyException HttpResponseMessage response; response.Content= new StringContent(JsonConvert.SerializeObject(results), system.Encoding.UTF8, "text/json"); 但是,以下序列化相同对象的方法不会产生此错误 Var serializer= new System.We
HttpResponseMessage response;
response.Content= new StringContent(JsonConvert.SerializeObject(results),
system.Encoding.UTF8, "text/json");
但是,以下序列化相同对象的方法不会产生此错误
Var serializer= new System.Web.Script.Serilaization.JavascriptSerializer()
{MaxJsonLength = int.MaxValue};
response.Content= new StringContent(serializer.Serialize(results),
system.Encoding.UTF8, "text/json")
但是,使用第二种方法时,客户端会抛出错误:
无法反序列化当前json数组,因为该类型需要json对象
所以我希望要么用第一种方法解决内存问题,要么弄明白为什么第二种方法不能像第一种方法那样反序列化
感谢对于大量数据,您希望将其流式传输到客户端,这样您就不会试图将整个内容保存在服务器上的内存中,而这正是您的示例中所发生的情况 下面是一篇关于如何使用JsonTextWriter和JsonSerializer直接写入响应流的好文章,这将最大限度地减少内存占用
关于客户端代码,您可以提供更多详细信息吗?我的猜测是,如果第一个方法的内存不足,第二个可能返回一个截断的JSON字符串,客户端无法反序列化该字符串,因为该字符串不完整。客户端代码可与JsonConvert.SerializeObject方法和较小的数据集配合使用:
var response=等待获取数据(客户端、查询)
var resultSet=wait response.Content.ReadAsAsync()
private async Task GetData(HttpClient client,DataQuery query)
{
var response=wait client.postsjsonasync(Settings.Default.Uri+@/cmd),query);
response.ensureccessstatuscode();
返回响应;