使用Json.Net序列化对象可能导致OutofMemoryexception免责声明:我确实完成了这里提供的大部分解决方案,但大多数都讨论反序列化时的OOMexception.我正在尝试使用Json.Net将一个对象(它是一棵树)序列化为Json。一切都适用于小对象,但在尝试使用大对象时出现OOMexception。因为它适用于相同数据类型的较小对象,所以我假设没有循环引用(我确实检查了我的数据结构)。有没有一种方法可以将我的对象转换为流(它是一个Windows应用程序商店应用程序)并使用该流生成Json?publicstaticasyncTaskSerializeIntoJson(stringfileName,StorageFolderdestinationFolder,Contentcontent){ITraceWritertraceWriter=newMemoryTraceWriter();尝试{stringjsonString=JsonConvert.SerializeObject(content,Formatting.Indented,newJsonSerializerSettings{PreserveReferencesHandling=PreserveReferencesHandling.Objects,TypeNameHandling=TypeNameHandling.All,Error=ReportJsonErrors,TraceWriter=traceWriter,StringEscapeHandling=StringEscapeHandling.EscapeNonAscii});System.Diagnostics.Debug.WriteLine(traceWriter);StorageFile文件=等待目标文件夹。创建文件异步。.FileIO.WriteTextAsync(文件,jsonString);返回真;}catch(NullReferenceExceptionnullException){System.Diagnostics.Debug.WriteLine(traceWriter);logger.LogError("序列化输入对象时发生异常,Error:"+nullException.Message);returnfalse;}catch(Exceptione){System.Diagnostics.Debug.WriteLine(traceWriter);logger.LogError("序列化输入对象时发生异常,错误:"+e.Message,e.ToString());returnfalse;}}要将我的对象转换为流,我发现的代码使用的是BinaryFormatter,它在Windows应用商店应用程序dll中不可用,这是由于您尝试序列化的原因数字ofrecords非常大,占用大量内存。针对此错误,我找到的解决方案是使用StreamWriter(JsonWriter或TextWriter)直接写入文档。如果您有Object使用TextWrite使用(TextWritertextWriter=File.CreateText("LocalJsonFile.json")){varserializer=newJsonSerializer();serializer.Serialize(textWriter,yourObject);如果你有String使用StringWriterStringBuildersb=newStringBuilder();StringWritersw=newStringWriter(sb);使用(JsonWritertextWriter=newJsonTextWriter(sw)){varserializer=newJsonSerializer();serializer.Serialize(textWriter,yourObject);根据对问题的评论更新了中建议的代码,这有效!以上就是C#学习教程:使用Json.Net序列化对象会导致OutofMemoryexception分享所有内容。如果对大家有用,需要了解更多C#学习教程,希望大家多加关注—publicstaticasyncTaskSerializeIntoJson(stringfileName,StorageFolderdestinationFolder,Contentcontent){try{StorageFilefile=awaitdestinationFolder.CreateFileAsync(文件名,CreationCollisionOption.ReplaceExisting);使用(varstream=awaitfile.OpenStreamForWriteAsync()){StreamWriterwriter=newStreamWriter(StreamWriter)jsonWriter=newJsonTextWriter(writer);JsonSeraliizerser=newJsonSerializer();ser.Formatting=Newtonsoft.Json.Formatting.Indented;ser.PreserveReferencesHandling=PreserveReferencesHandling.Objects;ser.TypeNameHandling=TypeNameHandling.All;ser.Error+=ReportJsonErrors;ser.Serialize(jsonWriter,内容);jsonWriter.Flush();}返回真;}catch(NullReferenceExceptionnullException){logger.LogError("序列化输入对象时发生异常,错误:"+nullException.Message);返回假;}catch(Exceptione){logger.LogError("序列化输入对象时发生异常,错误:"+e.Message,e.ToString());返回假;}}本文收集自网络,不代表立场。如涉及侵权请点击维权联系管理员删除转载请注明出处:
