Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一种序列化方法会产生内存不足错误,而另一种则不会_C#_Serialization_Httpresponsemessage - Fatal编程技术网

C# 一种序列化方法会产生内存不足错误,而另一种则不会

C# 一种序列化方法会产生内存不足错误,而另一种则不会,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

仅在非常大的集合上,以下行在服务器级别的mscorlib.dll抛出OutofMemroyException

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();
返回响应;