System.OutOfMemoryExceptionofJSON.NETwithList我正在处理一个过程,我的服务器使用JSON.Net生成一个文件,它有25000条记录,大小是85MB,然后文件由客户端导入。客户端下载文件并使用JSON.Net对其进行反序列化。我的问题是时间问题,在不同的机器上,反序列化命令给出:System.OutOfMemoryException注意:我尝试手动使用GC,但这不起作用。代码生成错误:varlistAddress=JsonConvert.DeserializeObject(File.ReadAllText(@"c:Temptest.json");代码生成JSON文件:using(StreamWriterfile=File.CreateText("C:\test.json")){JsonSerializerserializer=newJsonSerializer();serializer.Serialize(file,listAddress);}我的类地址publicclassEndereco{publicintCodigo{get;set;}publicstringCGCCPF{get;set;}publicchar?TipoPessoa{get;set;}publicstringUF{get;set;}publicstringSiglaDoRG{get;set;}publicstringMaeFantasica{get;set;}publicstringDescEndereco{get;set;}publicstringComplemento{get;}设置;}公共字符串Bairro{获取;设置;}公共字符串CEP{获取;设置;}公共字符串Pai{获取;设置;}公共字符串Cidade{获取;设置;}公共字符串电话{获取;设置;}公共字符串Fax{get;set;}publicstringEmail{get;set;}publicstringIEouRG{get;set;}publicstringOrgaoEmissorRG{get;set;}publicDateTime?DataNascimento{得到;放;}publicCampoObservacaoObservacao{get;放;公共日期时间?DataRegistro{得到;放;公共日期时间?DataUltAlteracao{得到;放;公共诠释?CodigoFuncionario{得到;放;}publicstringRamal{get;放;公共日期时间?DataDeEmissaoRG{得到;放;}publicstringAlfa1{get;放;}公共字符串Alfa2{得到;放;}公共双?Num1{得到;放;}公共双?Num2{得到;放;}publicstringPontoReferencia{get;放;}publicstringCelular{get;放;}publicstringEnderecoWeb{get;放;}publicstringConta{get;放;}publicstringRasocial{get;放;公共诠释?NcCodigo{得到;放;公共诠释?NcCodigoC{得到;放;}公共字符串CFOP{得到;放;}publicstringNumero{get;放;公共诠释?CodigoMunicipio{得到;放;公共诠释?CodigoPais{得到;放;}publicstringSuframa{get;放;}publicstringNumeroNit{get;放;}publicstringInscricaoMunicipal{get;放;}公共字符串IE{得到;放;}publicboolActive{get{return!Note["Status"].Equals("I");}设置{注意["状态"]=!值?“我”:String.Empty;}publicAddress(){Note=newFieldNote();}公共字符?MarketType{get{return!String.IsNullOrEmpty(Note["MarketType"])?(char?)Note["MarketType"][0]:null;}set{注意["市场类型"]=value.HasValue?value.ToString():String.Empty;}}公共字符?CivilStatus{get{return!String.IsNullOrEmpty(Note["CivilStatus"])?(char?)Note["CivilStatus"][0]:null;}set{Note["CivilStatus"]=value.HasValue?value.ToString():String.Empty;}}公共客户客户{get;放;}publicEmployee雇员{get;放;}publicBranchBranch{get;放;我正在研究上面链接的答案:Deserializeastreamofjsonarraysanitematatime下面的轻微修改可能会满足您的需求。它逐项读取并反序列化JSON,而不是将整个列表加载到内存中:需要了解更多C#学习教程,希望大家多多关注——publicstaticclassJsonConvertExtensions{publicstaticIEnumerableDeserializeEnumerableFile(stringfilename){使用(varstream=newStreamReader(filename))foreach(variteminDeserializeEnumerable(stream))yieldreturnitem;}publicstaticIEnumerableDeserializeEnumerableString(stringjson){使用(varsr=newStringReader(json))foreach(variteminDeserializeEnumerable(sr))yieldreturnitem;}publicstaticIEnumerableDeserializeEnumerable(TextReadertextReader){ervarserialize=JsonSerializer.CreateDefault();using(JsonTextReaderreader=newJsonTextReader(textReader)){while(reader.Read()){if(reader.TokenType==JsonToken.StartObject){//从流中加载每个对象并对其执行一些操作yieldreturnserializer。反序列化(读者);}}}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
