首页 新闻 会员 周边 捐助

json反序列化内存溢出

0
悬赏园豆:30 [已解决问题] 解决于 2019-09-05 15:32

C#后台请求restApi返回json字符串,请求成功之后返回json字符串,在对字符串反序列化的抛出异常,内存溢出。
请求回来的字符串写到本地txt大概260M
附上部分代码

补充下:返回的不只是数据,还有base64编码格式的文件流

Mr·林的主页 Mr·林 | 初学一级 | 园豆:150
提问于:2019-07-19 14:48
< >
分享
最佳答案
0

你反序列化后能有多大?能把内存爆了?要不试试这样,把返回的json切割为多个json,然后一点一点反序列化并处理

收获园豆:20
会长 | 专家六级 |园豆:12463 | 2019-07-19 16:19

我写到本地txt之后文件大概264M

Mr·林 | 园豆:150 (初学一级) | 2019-07-19 16:24

@Mr·林: 哦,这个大小和反序列后的大小并不能画等号,你如果没有什么办法可以试试我这个,把大json文件分隔成小json文件试试

会长 | 园豆:12463 (专家六级) | 2019-07-19 17:11
其他回答(3)
0

你的返回值真的有260M吗?如果没有,那可能是实体导航重复引用的造成的,使用[JsonIgnore]注解导航

happydaily | 园豆:260 (菜鸟二级) | 2019-07-19 14:53

有,主要是文件大

支持(0) 反对(0) Mr·林 | 园豆:150 (初学一级) | 2019-07-19 15:31

@Mr·林: 那就分批请求吧,比如一次请求20M

支持(0) 反对(0) happydaily | 园豆:260 (菜鸟二级) | 2019-07-19 17:08

@Mr·林: 说实话,这么大的JSON,估计浏览器都不一定吃的消

支持(0) 反对(0) happydaily | 园豆:260 (菜鸟二级) | 2019-07-19 17:08
0

试试 Stream

var serializer = new JsonSerializer();
using (var sr = new StreamReader(await response.Content.ReadAsStreamAsync()))
{
    using (var jsonTextReader = new JsonTextReader(sr))
    {
        var model = serializer.Deserialize<JObject>(jsonTextReader);
    }
}
收获园豆:10
dudu | 园豆:29642 (高人七级) | 2019-07-19 15:35

试过了,还是抛出异常

支持(0) 反对(0) Mr·林 | 园豆:150 (初学一级) | 2019-07-19 15:56
0

手动来吧.

吴瑞祥 | 园豆:29449 (高人七级) | 2019-07-19 16:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册