我得到一个 Json,其中包含一个存储 Base64 编码字符串的数据字段。
该 Json 被序列化并发送给客户端。
在客户端,newtonsoft json.net 反序列化器用于取回 Json。
但是,如果数据字段变大(~ 400 MB),反序列化器将抛出内存不足异常:数组维度超出支持范围。
我还在任务管理器中看到,内存消耗确实增长得很快。
有什么想法吗? json 字段有最大大小吗?
代码示例(简化):
HttpResponseMessage responseTemp = null;
responseTemp = client.PostAsJsonAsync(client.BaseAddress, message).Result;
string jsonContent = responseTemp.Content.ReadAsStringAsync.Result;
result = JsonConvert.DeserializeObject<Result>(jsonContent);
结果类:
public class Result
{
public string Message { get; set; }
public byte[] Data { get; set; }
}
UPDATE:
我认为我的问题是not序列化器,但只是试图处理内存中如此大的字符串。
当我将字符串读入内存时,应用程序的内存消耗急剧增加。该字符串上的每个操作都是相同的。目前,我认为我必须找到一种使用流的方法,并停止立即将所有内容读入内存。
使用 JsonConvert.DeserializeObject 读取大型 JSON 字符串将消耗大量内存。因此,解决此问题的方法之一是,您可以创建一个 JsonSerializer 实例,如下所示。
using (StreamReader r = new StreamReader(filePath))
{
using (JsonReader reader = new JsonTextReader(r))
{
JsonSerializer serializer = new JsonSerializer();
T lstObjects = serializer.Deserialize<T>(reader);
}
}
Here filePath:- 是您当前的 Json 文件并且T:- 是您的通用类型对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)