JSON反序列化后List(Of )为空,疑容量超限求验证及扩展方案
解决大JSON反序列化得到空列表的问题
嘿,先给你明确说:你的猜测不对——.NET里的List(Of T)最大容量是Int32.MaxValue(差不多21亿),13万连零头都不到,绝对不是List容量限制导致的问题。下面帮你排查真正原因,以及给出解决方案:
一、先揪出反序列化失败的核心原因
你说少量测试成功、全量数据得到空列表还没异常,大概率是JSON数据不完整/有隐性语法错误,或者反序列化配置忽略了错误。建议先开启错误捕获,把隐性问题暴露出来:
' 配置Newtonsoft.Json的错误处理,强制抛出异常 Dim jsonSettings As New JsonSerializerSettings() jsonSettings.Error = Sub(sender, e) Console.WriteLine($"反序列化出错位置: {e.ErrorContext.Path}") Console.WriteLine($"错误信息: {e.ErrorContext.Error.Message}") ' 不要忽略错误,让程序抛出异常方便定位 e.ErrorContext.Handled = False End Sub Try Dim allDATA As List(Of GeneralInfo) = JsonConvert.DeserializeObject(Of List(Of GeneralInfo))(jstr, jsonSettings) ' 反序列化后检查列表数量 Console.WriteLine($"成功加载{allDATA.Count}条数据") Catch ex As Exception Console.WriteLine($"捕获到异常: {ex.ToString()}") End Try
运行这段代码,你应该能看到具体的错误提示,比如JSON里某条数据格式不匹配、编码问题,或者jstr本身就没完整读取整个文件。
二、其他可能的原因及排查方向
- JSON文件读取不完整:如果你的
jstr是通过流读取(比如StreamReader)得到的,有没有确保流完全读完?建议先用File.ReadAllText("你的JSON文件路径")直接读取整个文件,排除读取不完整的问题。 - 内存压力过大:13万个
GeneralInfo对象,每个里面还有多个FullData,每个FullData又有500条数据,确实会占用不少内存。你可以打开任务管理器观察程序内存占用,如果接近系统内存上限,可能导致CLR隐性终止反序列化过程。这种情况下可以用流式反序列化分批处理,不用一次性加载所有对象到内存:
' 流式读取JSON,逐个处理GeneralInfo对象 Using stream As New FileStream("你的JSON文件路径", FileMode.Open) Using reader As New JsonTextReader(New StreamReader(stream)) Dim serializer As New JsonSerializer() ' 跳过数组开头的[ reader.Read() Dim itemCount As Integer = 0 While reader.Read() ' 遇到数组结尾的]就停止 If reader.TokenType = JsonToken.EndArray Then Exit While End If ' 逐个反序列化单个GeneralInfo Dim singleInfo As GeneralInfo = serializer.Deserialize(Of GeneralInfo)(reader) itemCount += 1 ' 这里可以把单个对象存入数据库、写入文件,或者分批加入List(比如每1000条处理一次) If itemCount Mod 1000 = 0 Then Console.WriteLine($"已处理{itemCount}条数据") End If End While End Using End Using
这种方式内存占用会低很多,不会一次性加载13万对象。
3. Newtonsoft.Json配置问题:有没有设置过NullValueHandling.Ignore或者MissingMemberHandling.Ignore?如果JSON里有和类定义不匹配的字段,默认会忽略,但不会导致整个列表为空,不过还是检查一下配置比较稳妥。
三、关于List(Of T)的扩展
再次明确:你完全不需要扩展List(Of T),它的容量足够容纳你的数据。问题的核心是反序列化过程中的隐性错误或者内存压力,而不是List本身的限制。
内容的提问来源于stack exchange,提问作者ruedi
相关产品推荐
相关产品推荐

