我的问题与this one基本相同,但不幸的是答案对我不起作用。
我正在尝试处理一些边缘情况,其中一种情况是我从服务器收到一个异常大(例如,1.5亿字符)的json字符串。我正在使用内存优化技术described in the json.net docs,但我在反序列化步骤中仍然得到OutOfMemoryError
。
使用json.net处理大型json对象的正确方法是什么?我决定设置一个最大长度标志,但我不知道该怎么做。
这是我的代码:
Dim serverResponseStream As Stream = 'GZipWrapperStream response from server
Using sr As StreamReader = New StreamReader(serverResponseStream), _
reader As JsonReader = New JsonTextReader(sr)
Dim serializer As JsonSerializer = New JsonSerializer()
'Out of memory exception here in Deserialize
Dim response = serializer.Deserialize(reader)
End Using
编辑:根据this answer,我也尝试过:
Dim a = New JArray()
Using sr As StreamReader = New StreamReader(serverResponseStream), _
reader As JsonReader = New JsonTextReader(sr)
While reader.Read()
If reader.TokenType = JsonToken.StartObject Then
'Out of memory exception here
Dim j = JObject.Load(reader)
a.Add(j)
End If
End While
End Using
答案 0 :(得分:-1)
这可能会起作用(取决于你要消毒的json的大小):
serializer.MaxJsonLength = Int32.MaxValue;
编辑:如果您使用的是JavaScriptSerializer()