Json.net:在处理大型对象时防止OutOfMemoryErrors

时间:2014-05-30 04:12:20

标签: json .net-4.0 out-of-memory json.net

我的问题与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

1 个答案:

答案 0 :(得分:-1)

这可能会起作用(取决于你要消毒的json的大小):

serializer.MaxJsonLength = Int32.MaxValue;

编辑:如果您使用的是JavaScriptSerializer()

,那就太糟糕了